Snowflake(OAuth)でのフェデレーションクエリの実行
このページでは、 によって管理されていない データに対して横串検索を実行するためのレイクハウスフェデレーションの設定方法について説明します。SnowflakeDatabricksレイクハウスフェデレーションの詳細については、「 レイクハウスフェデレーションとは」を参照してください。
レイクハウスフェデレーションを使用して Snowflake データベースに接続するには、 Databricks 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のワークスペースが有効になっています。
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。
- Databricks コンピュートは、 Databricks Runtime 13.3 LTS 以上、 および標準 または 専用 アクセスモードを使用する必要があります。
- SQLウェアハウスはProまたはServerlessで、2023.40以上を使用している必要があります。
必要な権限:
- 接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの CREATE CONNECTION権限を持つユーザーである必要があります。
- フォーリンカタログを作成するには、メタストアに対する CREATE CATALOG権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG権限を持っている必要があります。
追加の権限要件は、以下の各タスクベースのセクションに記載しています。
セキュリティ統合を作成する
Snowflakeコンソールで、 CREATE SECURITY INTEGRATIONを実行します。 次の値を置き換えます。
- 
<integration-name>: OAuth 統合の一意の名前。
- 
<workspace-url>: Databricks ワークスペースの URL。OAUTH_REDIRECT_URIをhttps://<workspace-url>/login/oauth/snowflake.htmlに設定する必要があります。ここで、<workspace-url>は、Snowflake 接続を作成する Databricks ワークスペースの一意の URL です。
- 
<duration-in-seconds>: 更新トークンの時間の長さ。
OAUTH_REFRESH_TOKEN_VALIDITY は、デフォルトで 90 日に設定されているカスタムフィールドです。 更新トークンの有効期限が切れたら、接続を再認証する必要があります。 フィールドを妥当な時間の長さに設定します。
例えば:
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権限を持つユーザー。
- 
Databricks ワークスペースで、 カタログ をクリックします。 
- 
[カタログ]ウィンドウの上部にある [ 追加] アイコンをクリックし、メニューから [ 接続の追加] を選択します。 または、 クイックアクセス ページから 外部データ > ボタンをクリックし、 接続 タブに移動して 接続を作成 をクリックします。 
- 
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。 
- 
[ 接続タイプ ] で [Snowflake ] を選択します。 
- 
[Auth type ] で、ドロップダウンメニューから [ OAuth] を選択します。
- 
(オプション)コメントを追加します。 
- 
次へ をクリックします。 
- 
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 にサインインします。 サインインに成功すると、 接続のセットアップ ウィザードに戻ります。 
 
- 
- 
接続の作成 をクリックします。 
- 
[カタログの基本 ] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。 
- 
(オプション)[ 接続をテスト ]をクリックして、動作することを確認します。 
- 
[ カタログを作成 ] をクリックします。 
- 
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある ] を選択するか、[ ワークスペースに割り当て ] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。 
- 
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。 
- 
カタログに対する 権限を付与 します。[ 許可 ] をクリックします。 - 
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。 
- 
各プリンシパルに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに BROWSEが付与されます。- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する read権限を付与します。
- ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する read権限とmodify権限を付与します。
- 付与する権限を手動で選択します。
 
- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する 
- 
付与 をクリックします。 
 
- 
- 
次へ をクリックします。 
- 
[メタデータ] ページで、タグのキーと値のペアを指定します。詳細については、「Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。 
- 
(オプション)コメントを追加します。 
- 
保存 をクリックします。 
大文字と小文字を区別するデータベース識別子
フォーリンカタログの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 タイプ | 
|---|---|
| decimal, number, numeric | DecimalType | 
| bigint, byteint, int, integer, smallint, tinyint | IntegerType | 
| float, float4, float8 | FloatType | 
| double, double precision, real | DoubleType | 
| char, character, string, text, time, varchar | StringType | 
| binary | BinaryType | 
| ブーリアン | BooleanType | 
| 日付 | DateType | 
| datetime, timestamp, timestamp_ltz, timestamp_ntz, timestamp_tz | TimestampType | 
クエリ フェデレーションの制限事項
- Snowflake OAuth エンドポイントは、Databricks コントロールプレーン IP からアクセスできる必要があります。 「Databricks のサービスと資産の IP アドレスとドメイン」を参照してください。Snowflake は、セキュリティ統合レベルでのネットワーク ポリシーの設定をサポートしており、これにより、 Databricks コントロール プレーンから OAuth エンドポイントへの直接接続を可能にする別のネットワーク ポリシーを使用して承認を行うことができます。
- プロキシの使用 、 プロキシホスト 、 プロキシポート 、およびSnowflakeロール構成オプションはサポートされていません。 Snowflake ロール を OAuth スコープの一部として指定します。
追加のリソース
Snowflakeドキュメンテーションの次の記事をご参照ください。