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

Snowflake(OAuth)でのフェデレーションクエリの実行

このページでは、 によって管理されていない データに対して横串検索を実行するためのレイクハウスフェデレーションの設定方法について説明します。SnowflakeDatabricksレイクハウスフェデレーションの詳細については、「 レイクハウスフェデレーションとは」を参照してください。

レイクハウスフェデレーションを使用してSnowflakeデータベースに接続するには、 Databricks Unity Catalogメタストアに次のものを作成する必要があります (2023 年 11 月 8 日以降に作成されたワークスペースには、すでにUnity Catalogメタストア プロビジョニングが自動的に作成されています)。

  • Snowflake データベースへの接続。
  • Unity Catalog 内のSnowflakeデータベースをミラーリングする フォーリンカタログ で、 Unity Catalog クエリー構文およびデータガバナンスツールを使用して、データベースへのDatabricksユーザーアクセスを管理できます。

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

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

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

カタログ フェデレーションでは、 Unity Catalogクエリがファイル ストレージに対して直接実行されます。 このアプローチは、コードを調整せずに段階的に移行する場合や、Unity Catalog に登録されたデータと並行して 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権限を持っています。

追加の権限要件は、以下の各タスクベースのセクションに記載しています。

セキュリティ統合を作成する

Snowflakeコンソールで、 CREATE SECURITY INTEGRATIONを実行します。 次の値を置き換えます。

  • <integration-name>: OAuth 統合の一意の名前。

  • <workspace-url>: Databricks ワークスペースの URL。 OAUTH_REDIRECT_URIhttps://<workspace-url>/login/oauth/snowflake.htmlに設定する必要があります。ここで、 <workspace-url> は、Snowflake 接続を作成する Databricks ワークスペースの一意の URL です。

  • <duration-in-seconds>: 更新トークンの時間の長さ。

重要

OAUTH_REFRESH_TOKEN_VALIDITY は、デフォルトで 90 日に設定されているカスタムフィールドです。 更新トークンの有効期限が切れたら、接続を再認証する必要があります。 フィールドを妥当な時間の長さに設定します。

例えば:

SQL
CREATE SECURITY INTEGRATION <integration-name>
TYPE = oauth
ENABLED = true
OAUTH_CLIENT = custom
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'
OAUTH_REDIRECT_URI = 'https://<workspace-url>/login/oauth/snowflake.html'
OAUTH_ISSUE_REFRESH_TOKENS = TRUE
OAUTH_REFRESH_TOKEN_VALIDITY = <duration-in-seconds>
OAUTH_ENFORCE_PKCE = TRUE;

接続を作成する

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

注記

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

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

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

  2. カタログ パネルの上部にある追加またはプラスアイコンアイコン を追加し 、メニューから 接続の作成を 選択します。

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

  4. [ 接続タイプ ] で [Snowflake ] を選択します。

  5. [Auth type ] で、ドロップダウンメニューから [OAuth] を選択します。

  6. (オプション)コメントを追加します。

  7. 次へ をクリックします。

  8. Snowflake ウェアハウスの次の認証と接続の詳細を入力します。

    • ホスト : たとえば、 snowflake-demo.east-us-2.azure.snowflakecomputing.com

    • ポート : たとえば、 443

    • ユーザー : たとえば、 snowflake-user

    • クライアント ID : Snowflakeコンソールで、 SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') を実行して、セキュリティ統合のクライアント ID を取得します。

    • クライアントシークレット : Snowflakeコンソールで、 SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>') を実行して、セキュリティ統合のクライアントシークレットを取得します。

    • OAuth スコープ : refresh_token session:role:<role-name>.使用するSnowflakeロールを <role-name>で指定します。

    • Snowflakeでサインイン : クリックし、OAuth 資格情報を使用して Snowflake にサインインします。

      サインインに成功すると、 接続のセットアップ ウィザードに戻ります。

  9. 接続の作成 をクリックします。

  10. [カタログの基本 ] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。

  11. (オプション)[ 接続をテスト ]をクリックして、動作することを確認します。

  12. [ カタログを作成 ] をクリックします。

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

  14. カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。

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

    1. カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。

    2. 各プリンシパルに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに BROWSE が付与されます。

      • ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する read 権限を付与します。
      • ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する read 権限と modify 権限を付与します。
      • 付与する権限を手動で選択します。
    3. 付与 をクリックします。

  16. 次へ をクリックします。

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

  18. (オプション)コメントを追加します。

  19. 保存 をクリックします。

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

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

例えば:

  • database は次のように変換されます。 DATABASE

  • "database" は次のように変換されます。 database

  • "database""" は次のように変換されます。 database"

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

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

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

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

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

  • フィルター
  • 予測
  • 上限
  • テーブルのJOIN
  • 集計 (Average、Corr、CovPopulation、CovSample、Count、Max、Min、StddevPop、StddevSamp、Sum、VariancePop、VarianceSamp)
  • 関数 (文字列関数、数学関数、データ関数、時刻関数、タイムスタンプ関数、およびその他の関数 (Alias、Cast、SortOrder など))
  • Windows の機能 (密度ランク、ランク、行番号)
  • 分別

データ型マッピング

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 からアクセスできる必要があります。 「Databricks コントロール プレーンからの送信 IP」を参照してください。Snowflake は、セキュリティ統合レベルでのネットワーク ポリシーの設定をサポートしており、これにより、 Databricks コントロール プレーンから OAuth エンドポイントへの直接接続を可能にする別のネットワーク ポリシーを使用して承認を行うことができます。
  • プロキシの使用プロキシホストプロキシポート 、およびSnowflakeロール構成オプションはサポートされていません。 Snowflake ロール を OAuth スコープの一部として指定します。

追加のリソース

Snowflakeドキュメンテーションの次の記事をご参照ください。