Snowflakeカタログフェデレーションを有効にする
この記事では、カタログフェデレーションを使用してSnowflakeフェデレーションを有効にする方法を説明します。カタログフェデレーションにより、Unity Catalog は Snowflake Managed Iceberg テーブルをクラウドストレージから直接読み取ることができ、クエリフェデレーションと比較してパフォーマンスとコスト効率が向上します。
カタログ連携機能により、Unity Catalogはオブジェクトストレージ内のSnowflake Managed Icebergテーブルに直接アクセスします。クエリは、よりコスト効率が高く、パフォーマンスが最適化されたDatabricksコンピュートを使用してのみ実行されます。 Iceberg以外のSnowflakeテーブルはカタログフェデレーションの対象外であり、常にクエリフェデレーションを使用してアクセスされます。
カタログ フェデレーションとクエリ フェデレーションはどちらも、接続を設定するために同じ認証方法に依存します。
- Snowflake組み込みOAuth
- Microsoft Entra ID を使用した OAuth
- Okta による OAuth
- OAuth アクセストークン
- PEM秘密鍵
- 基本認証(ユーザー名/パスワード)
始める前に
カタログ フェデレーションを使用して Snowflake でフェデレーション クエリを実行するには、次の要件を満たす必要があります。
ワークスペースの要件:
- Unity Catalogに対してワークスペースが有効になりました。 2024 年 3 月 6 日以降に作成されたワークスペースは、自動メタストアのプロビジョニングを含め、Unity Catalog に対して自動的に有効になります。ワークスペースが自動的に有効化される前に Unity Catalog が有効になっていない限り、メタストアを手動で作成する必要はありません。「Unity Catalog の自動有効化」を参照してください。
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 レイクハウスフェデレーションのネットワーキングに関する推奨事項を参照してください。
- DatabricksコンピュートではDatabricks Runtime 13.3 LTS以降と 標準 または 専用 アクセス モードを使用する必要があります。
- SQLウェアハウスはProまたはServerlessで、2023.40以上を使用している必要があります。
必要な権限:
- 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされた Unity Catalog メタストアに対する
CREATE CONNECTION権限を持つユーザーである必要があります。Unity Catalogが自動的に有効になったワークスペースでは、ワークスペース管理者は無事にCREATE CONNECTION権限を持ちます。 - フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG権限があり、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG権限を持っている必要があります。 Unity Catalogに対して自動的に有効になったワークスペースでは、ワークスペース管理者は無事にCREATE 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とUnity Catalogで必要な権限を設定する必要があります。
Snowflakeの権限を付与する
接続に使用する Snowflake ロールには、連携させたいデータベース、スキーマ、およびテーブルを読み取るための十分な権限が必要です。Snowflakeで以下のSQLを実行してください。
GRANT USAGE ON DATABASE <db> TO ROLE <role>;
GRANT USAGE ON SCHEMA <db>.<schema> TO ROLE <role>;
GRANT SELECT ON ALL TABLES IN SCHEMA <db>.<schema> TO ROLE <role>;
GRANT SELECT ON FUTURE TABLES IN SCHEMA <db>.<schema> TO ROLE <role>;
以下のように置き換えてください。
<db>- 連携する Snowflake データベースの名前 (例:MY_DATABASE)。<schema>- そのデータベース内のスキーマ名(例:MY_SCHEMA)。<role>- 接続資格情報で指定された Snowflake ロール (例:MY_DATABRICKS_ROLE)。
Snowflakeの権限が不足していることが、フェデレーションカタログにスキーマやテーブルが表示されない一般的な原因です。
Unity Catalogの権限を付与する
カタログ フェデレーションを設定した後、ユーザーはフェデレーション テーブルにアクセスするために適切なUnity Catalog権限を持っている必要があります。
- すべてのユーザーには、カタログとスキーマに対するそれぞれ
USE CATALOG権限とUSE SCHEMA権限が必要です。 - カタログ フェデレーションを介してアクセスされるIcebergテーブルの場合、ユーザーにはUnity Catalogフェデレーション テーブルに対する
MODIFY権限が必要です。 - フェデレーション テーブルから読み取るには、ユーザーに
SELECT権限が必要です。
Unity Catalog権限とその付与方法の詳細については、 Unity Catalogでの権限の管理」を参照してください。
カタログフェデレーションの制限
カタログ フェデレーションを使用して Snowflake でフェデレーション クエリを実行する場合、次の制限があります。
-
一部のアイスバーグ テーブルは、クエリ フェデレーションを使用してのみ読み取ることができます。
- URI と互換性のない場所 (特殊文字を含む) を持つテーブル。
- メタデータの場所がテーブルの場所外にあるテーブル。
- サポートされていないスキームの場所を持つテーブル(サポートされているのは
s3、s3a、s3n、abfs、abfss、gs、r2、wasb、およびwasbsのみです)。
-
外部エンジンからアクセスされる外部 Iceberg テーブルは、外部カタログへの書き込みと Unity Catalog による読み取りの間の読み取り/書き込みの一貫性を確保するために、
REFRESH FOREIGN TABLE <table_name>を使用して更新する必要があります。 -
大文字と小文字を区別せずに、同一の名前を持つテーブルが競合します。最初にロードされるテーブルが表示されます。
-
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 ソース形式が表示されます。 |
トラブルシューティング
統合カタログにはスキーマやテーブルは表示されません。
カタログフェデレーションを設定した後、Snowflakeデータベースのスキーマやテーブルが表示されない場合、最も一般的な原因は、接続に使用されているSnowflakeロールに必要な権限が付与されていないことです。ロールが対象のデータベースとスキーマに対してUSAGE 、テーブルに対してSELECTを持っていることを確認してください。Snowflakeのアクセス許可の付与を参照してください。