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

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テーブルへのパスの ストレージ資格情報外部ロケーション も作成する必要があります。

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

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

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

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

  2. Snowflake Horizon Catalog への接続を作成し、上記の認証方法のいずれかを使用してフォーリンカタログを作成します。 このカタログ内の Iceberg テーブルのメタデータが保存されるクラウド ストレージ内の場所を指定する必要があります。

    カタログ上で保存場所を設定すると、オブジェクト ストレージを介してフォーリンカタログ内のIcebergテーブルを読み取ることができます。 JDBC プロトコル経由で Iceberg テーブルを読み取ったり書き込んだりすることはできなくなります (Iceberg 以外のテーブルは影響を受けません)。

    カタログ経由でアクセスできるクラウド ストレージ パスである承認済みパスも追加する必要があります。フェデレーション カタログ経由でクエリできるのは、これらのパスに該当するテーブルのみです。パスは外部ロケーションによってカバーされる必要があります。

カタログフェデレーションの制限

カタログ フェデレーションを使用して Snowflake でフェデレーション クエリを実行する場合、次の制限があります。

  • 一部のアイスバーグ テーブルは、クエリ フェデレーションを使用してのみ読み取ることができます。

    • URI と互換性のない場所 (特殊文字を含む) を持つテーブル。
    • メタデータの場所がテーブルの場所外にあるテーブル。
    • サポートされていないスキームの場所を持つテーブル(サポートされているのはs3s3as3nabfsabfssgsr2wasb 、および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にクエリを発行して次の操作を行います。

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

直接アクセスの試み

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

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

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