Snowflakeカタログフェデレーションを有効にする
この記事では、カタログ フェデレーションを使用して Snowflake フェデレーションを有効にする方法を説明します。カタログ フェデレーションを使用すると、 Unity Catalogクエリをファイル ストレージに対して直接実行できるため、クエリ フェデレーションに比べてパフォーマンスとコスト効率が向上します。
カタログフェデレーションを使用すると、 Unity Catalogオブジェクトストレージ内のフォーリンテーブルに直接アクセスします。 クエリは、よりコスト効率が高く、パフォーマンスが最適化されたDatabricksコンピュートを使用してのみ実行されます。
カタログ フェデレーションとクエリ フェデレーションはどちらも、接続を設定するために同じ認証方法に依存します。
始める前に
カタログ フェデレーションを使用して Snowflake でフェデレーション クエリを実行するには、次の要件を満たす必要があります。
ワークスペースの要件:
- Unity Catalogのワークスペースが有効になっています。
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 レイクハウスフェデレーションのネットワーキングに関する推奨事項を参照してください。
- DatabricksコンピュートではDatabricks Runtime 13.3 LTS以降と 標準 または 専用 アクセス モードを使用する必要があります。
- SQLウェアハウスはProまたはServerlessで、2023.40以上を使用している必要があります。
必要な権限:
- 接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの
CREATE CONNECTION
権限を持つユーザーである必要があります。 - フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
権限を持っている必要があります。
追加の権限要件は、以下の各タスクベースのセクションに記載しています。
- Databricks Runtime 16.4 LTS 以上または Databricks SQL を使用します。
カタログフェデレーションを設定する
カタログ フェデレーションをセットアップするための一般的な手順は、クエリ フェデレーションのセットアップと似ています。最初にSnowflakeへの接続を作成し、次にフォーリンカタログを作成して構成します。 ただし、 Snowflakeに登録されているApache Icebergテーブルへのパスの ストレージ資格情報 と 外部ロケーション も作成する必要があります。
-
Icebergテーブルの外部ロケーションを作成します。
Snowflakeデータベースに登録されているIcebergテーブルを保持するクラウド ストレージの場所へのアクセスを制御するには、 Unity Catalogで外部ロケーションを構成する必要があります。 外部ロケーションは、ストレージ認証情報をクラウド ストレージ コンテナ パスに関連付ける、 Unity Catalogセキュリティ保護可能なオブジェクトです。 外部ロケーションの概要を参照してください。
次のインターフェイスを使用して外部ロケーションを作成できます。
外部ロケーションは、フォーリンカタログ設定時に承認されたパスとして指定されます。
-
Snowflake Horizon Catalog への接続を作成し、上記の認証方法のいずれかを使用してフォーリンカタログを作成します。 このカタログ内の Iceberg テーブルのメタデータが保存されるクラウド ストレージ内の場所を指定する必要があります。
カタログ上で保存場所を設定すると、オブジェクト ストレージを介してフォーリンカタログ内のIcebergテーブルを読み取ることができます。 JDBC プロトコル経由で Iceberg テーブルを読み取ったり書き込んだりすることはできなくなります (Iceberg 以外のテーブルは影響を受けません)。
カタログ経由でアクセスできるクラウド ストレージ パスである承認済みパスも追加する必要があります。フェデレーション カタログ経由でクエリできるのは、これらのパスに該当するテーブルのみです。パスは外部ロケーションによってカバーされる必要があります。
カタログフェデレーションの制限
カタログ フェデレーションを使用して Snowflake でフェデレーション クエリを実行する場合、次の制限があります。
-
一部のアイスバーグ テーブルは、クエリ フェデレーションを使用してのみ読み取ることができます。
- URI と互換性のない場所 (特殊文字を含む) を持つテーブル。
- メタデータの場所がテーブルの場所外にあるテーブル。
- サポートされていないスキームの場所を持つテーブル(サポートされているのは
s3
、s3a
、s3n
、abfs
、abfss
、gs
、r2
、wasb
、およびwasbs
のみです)。
-
外部エンジンからアクセスされる外部 Iceberg テーブルは、外部カタログへの書き込みと Unity Catalog による読み取りの間の読み取り/書き込みの一貫性を確保するために、
ALTER TABLE <table_name> REFRESH
を使用して更新する必要があります。 -
大文字と小文字を区別せずに、同一の名前を持つテーブルが競合します。最初にロードされるテーブルが表示されます。
-
Azure の場合、Snowflake Iceberg テーブルをコンテナーのルートの場所に配置することはできません。
Iceberg 関連の制限については、Iceberg テーブルの制限を参照してください。
外部のSnowflakeテーブルがカタログまたはクエリフェデレーションを使用しているかどうかを確認します
カタログ フェデレーションを使用して読み取られた外部 Snowflake テーブルでは、カタログ エクスプローラーに Iceberg ソース形式が表示されます。クエリ フェデレーションを使用して読み取られた Iceberg テーブルでは、カタログ エクスプローラーに Snowflake ソース形式が表示されます。両方のストレージ形式のテーブルに対するクエリ実行は、 Snowflakeコンピュートを使用するクエリ フェデレーションを使用して実行されます。
フォールバックモード
フェデレーション Snowflake カタログ内のテーブルをクエリすると、Databricks は最適なパフォーマンスを得るために、Iceberg テーブルをクラウド ストレージから直接読み取ろうとします。テーブルが直接アクセスの基準を満たしていない場合、Databricks は JDBC を使用してクエリを Snowflake にフェデレーションします。次の表は、クエリ解決フローの概要を示しています。
クエリ解決段階 | 説明 |
---|---|
カタログの発見 | クエリの計画中に、Databricks Runtime は Unity Catalog をチェックし、テーブルが Snowflake フェデレーション カタログに存在することを検出します。 |
Snowflakeメタデータ解決 | Unity Catalog接続を使用して、 Databricks Runtime Snowflakeにクエリを発行して次の操作を行います。
|
直接アクセスの試み | 次のいずれかの条件が満たされない場合、Databricks Runtime は Snowflake JDBC ドライバーを使用してクエリをフェデレートします。この表には、カタログ エクスプローラーの Snowflake ソース形式が表示されます。
すべての条件が満たされた場合、Databricks Runtime は返されたメタデータをチェックし、オブジェクト ストレージ パスから Iceberg テーブルを直接読み取ります。この表には、カタログ エクスプローラーの Iceberg ソース形式が表示されます。 |