Snowflake でフェデレーション クエリを実行する (OAuth アクセス トークン)

このページでは、Azure Databricks によって管理されていない Snowflake データに対してフェデレーション クエリを実行するように Lakehouse Federation を設定する方法について説明します。 Lakehouse フェデレーションの詳細については、「外部データベースとカタログへの接続」を参照してください。

Lakehouse Federation を使用して Snowflake データベースに接続するには、Azure Databricks Unity カタログ メタストアで次を作成する必要があります (2023 年 11 月 9 日以降に作成されたワークスペースには、Unity カタログ メタストアが自動的にプロビジョニングされています)。

  • Snowflake データベースへの接続
  • Unity Catalog クエリ構文とデータ ガバナンス ツールを使用して、データベースにアクセスできる Azure Databricks ユーザーを管理するために、Unity Catalog のSnowflake データベースをミラーリングする外部カタログ

このページでは、OAuth アクセス トークンを使用して Snowflake データに対してフェデレーション クエリを実行する方法について説明します。 その他の認証方法については、次のページを参照してください。

クエリ フェデレーションまたはカタログ フェデレーションを使用して、Snowflake でフェデレーション クエリを実行できます。

クエリフェデレーションでは、JDBC は Unity カタログクエリを外部データベースにプッシュします。 これは、ETL パイプラインでのオンデマンドレポートまたは概念実証作業に最適です。

カタログ フェデレーションでは、Unity カタログ クエリはファイル ストレージに対して直接実行されます。 このアプローチは、コードの適応を伴わない増分移行や、Unity カタログに登録されているデータと共に Snowflake のデータを保持する必要がある組織向けの長期的なハイブリッド モデルとして役立ちます。 Snowflake カタログ フェデレーションを有効にするを参照してください。

開始する前に

ワークスペースの要件:

  • Unity Catalog を使用できるワークスペース。 2023 年 11 月 9 日以降に作成されたワークスペースは、自動メタストア プロビジョニングを含め、Unity カタログに対して自動的に有効になります。 ワークスペースが自動有効化の前にあり、Unity カタログに対して有効になっていない場合を除き、メタストアを手動で作成する必要はありません。 Unity カタログについて始めに知っておくべきことを参照してください

コンピューティング要件:

  • コンピューティング リソースからターゲット データベース システムへのネットワーク接続。 「レイクハウス フェデレーションのためのネットワークに関する推奨事項」を参照してください。
  • Azure Databricks コンピューティングでは、Databricks Runtime 13.3 LTS 以降を使用し、Standard または デディケート アクセス モードを使用する必要があります。
  • SQL ウェアハウスはプロまたはサーバーレスである必要があり、2023.40 以降を使用する必要があります。

必要なアクセス許可:

  • 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity カタログメタストアに対する CREATE CONNECTION 権限を持つユーザーである必要があります。 Unity カタログが自動的に有効になっているワークスペースでは、ワークスペース管理者は既定で CREATE CONNECTION 特権を持っています。
  • 外部カタログを作成するには、メタストアに対する CREATE CATALOG 権限を持ち、接続の所有者であるか、接続に対する CREATE FOREIGN CATALOG 特権を持っている必要があります。 Unity カタログが自動的に有効になっているワークスペースでは、ワークスペース管理者は既定で CREATE CATALOG 特権を持っています。

追加の権限要件は、以下の各タスク ベースのセクションで規定されています。

OAuth アクセス トークンを要求する

方法: Snowflake ナレッジ ベースのカスタム クライアントに対して Snowflake OAuth を使用して OAuth トークンを生成して使用する方法に従います。

接続を作成する

接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターでカタログ エクスプローラーまたは CREATE CONNECTION SQL コマンドを使用できます。

Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections および Unity Catalog コマンドを参照してください。

必要な権限: メタストア管理者、または CREATE CONNECTION 特権を持つユーザー。

カタログ エクスプローラー

  1. Azure Databricks ワークスペースで、[ データ] アイコンをクリックします。カタログ

  2. [ プラグ] アイコンをクリックします。[接続] をクリックし、[ 接続] をクリックします。

  3. [ 接続の作成 ] ボタンをクリックします。

  4. 接続 のセットアップ ウィザードの [接続の基本] ページで、わかりやすい 接続名入力します。

  5. [接続の種類] で、[Snowflake] を選択します。

  6. [ 認証の種類] で、ドロップダウン メニューから [ OAuth Access Token ] を選択します。

  7. (省略可能)コメントを追加します。

  8. [次へ] をクリックします。

  9. [認証 ] ページで 、次の認証と接続の詳細を入力します。

  10. [次へ] をクリックします。

  11. [ 接続の詳細 ] ページで、Snowflake ウェアハウスの名前を入力します。

  12. Snowflake への接続にプロキシを使用する場合は、[プロキシを 使用 する] ボックスをオンにして、必要な詳細を入力します。

  13. [接続の作成] をクリックします。

  14. カタログの基本 ページで、外部カタログの名前を入力します。

  15. [ データベース] に、Snowflake にデータベース名を入力します。 外部カタログは、外部データ システム内のデータベースをミラー化して、Azure Databricks と Unity Catalog を使用してそのデータベース内のデータへのアクセスを照会および管理できるようにします。

  16. (省略可能) [接続のテスト] をクリックして、動作することを確認します。

  17. カタログを作成 をクリックします。

  18. [Access] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 [すべてのワークスペースにアクセス権を持たせる] を選択するか、[ワークスペースへの割り当て] をクリックしてワークスペースを選択し、[割り当て] をクリックします。

  19. カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。 テキストボックスに主要項目を入力し、表示された結果からその項目をクリックします。

  20. カタログに関する権限 を付与します。 [許可] をクリックします。

    1. カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。 テキストボックスに主要項目を入力し、表示された結果からその項目をクリックします。
    2. 各プリンシパルに付与する 特権プリセット を選択します。 既定では、すべてのアカウント ユーザーに BROWSE が付与されます。
      • ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する read 権限を付与します。
      • ドロップダウン メニュー データ エディター を選択して、カタログ内のオブジェクトに対する read 権限と modify 権限を付与します。
      • 付与する特権を手動で選択します。
    3. [許可] をクリックします。
  21. [次へ] をクリックします。

  22. [メタデータ] ページで、タグのキーと値のペアを指定します。 詳細については、「Unity カタログのセキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。

  23. (省略可能)コメントを追加します。

  24. [保存] をクリックします。

SQL

ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user '<user>',
  access_token '<access-token>',
  expires_in_secs '<expiration-time-in-seconds>'
);

Databricks では、資格情報などの機密性の高い値にプレーンテキスト文字列ではなく、シークレット 使用することをお勧めします。 例えば次が挙げられます。

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user secret ('<secret-scope>','<secret-key-user>'),
  access_token secret ('<secret-scope>','<secret-key-access-token>'),
  expires_in_secs '<expiration-time-in-seconds>'
)

シークレットの設定については、「シークレットの管理」を参照してください。

高度な接続オプション

Snowflake 接続では、制限付きエグレスまたはプライベート接続環境に対して、次の高度なオプションがサポートされています。

  • disableOCSPChecks: Snowflake JDBC ドライバーでオンライン証明書ステータス プロトコル (OCSP) 証明書失効チェックを無効にするには、 true に設定します。 OCSP チェックを無効にすると、証明書失効チェックがスキップされます。

Important

可能な限り、Snowflake OCSP レスポンダーへの送信トラフィックを許可します。 disableOCSPChecks設定を解除するか、falseに設定します。 制限付きエグレスまたはプライベート接続のセットアップでこのトラフィックを許可できない場合にのみ、 true に設定します。

このオプションはカタログ エクスプローラーには表示されません。 これは、SQL との接続を作成するときに設定できます。

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  <connection-options>,
  disableOCSPChecks 'true'
);

既存の接続の場合は、 ALTER CONNECTIONを使用します。

大文字と小文字を区別するデータベース識別子

外部カタログの database フィールドは、Snowflake データベース識別子にマップされます。 Snowflake データベース識別子で大文字と小文字が区別されない場合、外部カタログ <database-name> で使用する大文字と小文字が保持されます。 ただし、Snowflake データベース識別子で大文字と小文字が区別される場合は、大文字と小文字を区別するために、外部カタログ <database-name> を二重引用符で囲む必要があります。

例えば次が挙げられます。

  • databaseDATABASE に変換されます。

  • "database"database に変換されます。

  • "database"""database" に変換されます。

    二重引用符をエスケープするには、別の二重引用符を使用します。

  • "database"" は、二重引用符が正しくエスケープされないため、エラーになります。

詳細については、Snowflake ドキュメントの「識別子の要件」を参照してください。

サポートされているプッシュダウン

次のプッシュダウンがサポートされています。

  • フィルター
  • 予測
  • 極限
  • Offset
  • 結合
  • 集計 (Average、Corr、CovPopulation、CovSample、Count、Max、Min、StddevPop、StddevSamp、Sum、VariancePop、VarianceSamp)
  • 関数 (文字列関数、数学関数、日付、時刻、タイムスタンプ関数、エイリアス、キャスト、SortOrder などのその他の関数)
  • ウィンドウ関数 (DenseRank、Rank、RowNumber)
  • 並べ替え
  • databricks Runtime 17.3 以降でサポートされている Top-N (並べ替えと制限を 1 回の操作に結合)

データ型のマッピング

Snowflake から Spark に読み取ると、データ型は次のようにマップされます。

Snowflake 型 Spark の種類
decimalnumbernumeric DecimalType
bigintbyteintintintegersmallinttinyint IntegerType
floatfloat4float8 FloatType
doubledouble precisionreal DoubleType
charcharacterstringtexttimevarchar StringType
binary BinaryType
boolean BooleanType
date DateType
datetimetimestamptimestamp_ltztimestamp_ntztimestamp_tz TimestampType

制限事項

  • Snowflake OAuth エンドポイントには、Databricks コントロール プレーン IP からアクセスできる必要があります。 Azure Databricks コントロール プレーンからの送信 IP を参照してください。 Snowflake では、セキュリティ統合レベルでネットワーク ポリシーの構成がサポートされています。そのため、Databricks のコントロール プレーンから OAuth の認可用エンドポイントに直接接続できる個別のネットワーク ポリシーを設定できます。
  • プロキシの使用プロキシ ホストプロキシ ポート、Snowflake ロールの構成オプションはサポートされていません。 OAuth スコープの一部として Snowflake ロールを指定します。

その他のリソース

Snowflake ドキュメントの次の記事を参照してください。