メインコンテンツまでスキップ

Snowflakeカタログフェデレーションを有効にする

この記事では、カタログフェデレーションを使用してSnowflakeフェデレーションを有効にする方法を説明します。カタログフェデレーションにより、Unity Catalog は Snowflake Managed Iceberg テーブルをクラウドストレージから直接読み取ることができ、クエリフェデレーションと比較してパフォーマンスとコスト効率が向上します。

カタログ連携機能により、Unity Catalogはオブジェクトストレージ内のSnowflake Managed Icebergテーブルに直接アクセスします。クエリは、よりコスト効率が高く、パフォーマンスが最適化されたDatabricksコンピュートを使用してのみ実行されます。 Iceberg以外のSnowflakeテーブルはカタログフェデレーションの対象外であり、常にクエリフェデレーションを使用してアクセスされます。

カタログ フェデレーションとクエリ フェデレーションはどちらも、接続を設定するために同じ認証方法に依存します。

始める前に

カタログ フェデレーションを使用して Snowflake でフェデレーション クエリを実行するには、次の要件を満たす必要があります。

ワークスペースの要件:

  • Unity Catalogに対してワークスペースが有効になりました。 2023 年 11 月 8 日以降に作成されたワークスペースは、自動メタストアのプロビジョニングを含め、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テーブルへのパスの ストレージ資格情報外部ロケーション も作成する必要があります。

  1. Icebergテーブルの外部ロケーションを作成します。

    Snowflakeデータベースに登録されているIcebergテーブルを保持するクラウド ストレージの場所へのアクセスを制御するには、 Unity Catalogで外部ロケーションを構成する必要があります。 外部ロケーションは、ストレージ認証情報をクラウド ストレージ コンテナ パスに関連付ける、 Unity Catalogセキュリティ保護可能なオブジェクトです。 外部ロケーションの概要を参照してください。

    次のインターフェイスを使用して外部ロケーションを作成できます。

    外部ロケーションは、フォーリンカタログ設定時に承認されたパスとして指定されます。

  2. Snowflake Horizon Catalog への接続を作成し、上記の認証方法のいずれかを使用してフォーリンカタログを作成します。 このプロンプトでは、カタログ名、種類、接続、およびデータベースを設定する必要があります。以下の項目も設定する必要があります。

    • 承認済みパス :カタログからアクセスできるクラウドストレージパス。統合カタログは、これらのパス外のテーブルを照会できません。パスは外部ロケーションの一部である必要があります。カタログ作成後でも、承認済みパスを編集できます。「承認されたパスとは何か?」を参照してください。
    • 保存場所 :このカタログ内の Iceberg テーブルのメタデータを保存するためのクラウドストレージ上の場所。この設定により、オブジェクト ストレージによってフォーリンカタログ内のIcebergテーブルを読み取ることができます。 JDBCプロトコルを使用したIcebergテーブルへの読み書きはサポートされていませんが、Iceberg以外のテーブルには影響はありません。

フェデレーションテーブルへのアクセス権限を付与する

ユーザーはSnowflakeとUnity Catalogで必要な権限を設定する必要があります。

Snowflakeの権限を付与する

接続に使用する Snowflake ロールには、連携させたいデータベース、スキーマ、およびテーブルを読み取るための十分な権限が必要です。Snowflakeで以下のSQLを実行してください。

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 と互換性のない場所 (特殊文字を含む) を持つテーブル。
    • メタデータの場所がテーブルの場所外にあるテーブル。
    • サポートされていないスキームの場所を持つテーブル(サポートされているのはs3s3as3nabfsabfssgsr2wasb 、およびwasbsのみです)。
  • 外部エンジンからアクセスされる外部Icebergテーブルは、 ALTER TABLE <table_name> REFRESHを使用して更新する必要があります。これにより、外部カタログへの書き込みと、 Unity CatalogオープンAPIsを介した外部エンジンによる読み取りとの間の読み書きの一貫性が確保されます。 REFRESHフォーリンカタログ、SCHEMA、およびTABLEを参照してください。

  • 大文字と小文字を区別せずに、同一の名前を持つテーブルが競合します。最初にロードされるテーブルが表示されます。

  • 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にクエリを発行して次の操作を行います。

  • ターゲット テーブルが Iceberg テーブルであることを確認します。
  • 最新のmetadata.jsonパスとテーブルの場所を要求します。

直接アクセスの試み

次のいずれかの条件が満たされない場合、Databricks Runtime は Snowflake JDBC ドライバーを使用してクエリをフェデレートします。この表には、カタログ エクスプローラーの Snowflake ソース形式が表示されます。

  • 特殊文字を含む、URI と互換性のない場所を持つテーブル。
  • メタデータの場所がテーブルの場所外にあるテーブル。
  • サポートされていないスキームがある場所を含むテーブル。サポートされるのは、 s3s3as3nabfsabfssgsr2wasb 、およびwasbsのみです。

すべての条件が満たされた場合、Databricks Runtime は返されたメタデータをチェックし、オブジェクト ストレージ パスから Iceberg テーブルを直接読み取ります。この表には、カタログ エクスプローラーの Iceberg ソース形式が表示されます。

トラブルシューティング

統合カタログにはスキーマやテーブルは表示されません。

カタログフェデレーションを設定した後、Snowflakeデータベースのスキーマやテーブルが表示されない場合、最も一般的な原因は、接続に使用されているSnowflakeロールに必要な権限が付与されていないことです。ロールが対象のデータベースとスキーマに対してUSAGE 、テーブルに対してSELECTを持っていることを確認してください。Snowflakeのアクセス許可の付与を参照してください。