Snowflakeでフェデレーションクエリを実行する
この記事では、 によって管理されていない データに対して横串検索を実行するようにレイクハウスフェデレーションを設定する方法について説明します。SnowflakeDatabricksレイクハウスフェデレーションの詳細については、「 レイクハウスフェデレーションとは」を参照してください。
レイクハウスフェデレーションを使用して Snowflake データベースに接続するには、 Databricks Unity Catalog メタストアに次のものを作成する必要があります。
- Snowflake データベースへの接続。
- Unity Catalog 内のSnowflakeデータベースをミラーリングする フォーリンカタログ で、 Unity Catalog クエリー構文およびデータガバナンスツールを使用して、データベースへのDatabricksユーザーアクセスを管理できます。
始める前に
ワークスペースの要件:
- Unity Catalogのワークスペースが有効になっています。
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。
- Databricks コンピュートは、 Databricks Runtime 13.3 LTS 以上、 および標準 または 専用 アクセスモードを使用する必要があります。
- SQLウェアハウスはProまたはServerlessで、2023.40以上を使用している必要があります。
必要な権限:
- 接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの
CREATE CONNECTION
権限を持つユーザーである必要があります。 - フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
権限を持っている必要があります。
追加の権限要件は、以下の各タスクベースのセクションに記載しています。
- OAuth を使用して認証する予定の場合は、Snowflakeコンソールでセキュリティ統合を作成します。
- OAuth アクセス トークンを使用して認証する予定の場合は、アクセス トークンも要求する必要があります。
(オプション)Snowflakeコンソールでセキュリティ統合を作成する
OAuth を使用して認証する場合は、Snowflake接続を作成する前に、このステップに従ってください。 代わりにユーザー名とパスワードを使用して認証する場合は、このセクションをスキップしてください。
Snowflakeの組み込みOAuthインテグレーションのみがサポートされています。Okta や Microsoft Entra ID などの外部 OAuth 統合はサポートされていません。
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;
(オプション)OAuth アクセス トークンを要求する
「How To: Snowflake OAuth を使用してカスタムクライアント用に OAuth トークンを生成して使用する」に従ってください Snowflakeナレッジベースで。
接続を作成する
接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、Databricksノートブックまたは Databricks SQLクエリーエディタで CREATE CONNECTION
SQLコマンドを使用できます。
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストア管理者またはCREATE CONNECTION
権限を持つユーザー。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
カタログ をクリックします。
-
[カタログ]ウィンドウの上部にある [
追加] アイコンをクリックし、メニューから [ 接続の追加] を選択します。
または、 クイックアクセス ページから 外部データ > ボタンをクリックし、 接続 タブに移動して 接続を作成 をクリックします。
-
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。
-
[ 接続タイプ ] で [Snowflake ] を選択します。
-
[認証タイプ ] で、ドロップダウン メニューから [
Username and password
] (基本認証)、[OAuth access token
]、[PEM Private Key
]、または [OAuth
] を選択します。 -
(オプション)コメントを追加します。
-
次へ をクリックします。
-
Snowflake ウェアハウスの次の認証と接続の詳細を入力します。選択した認証方法に固有のプロパティの前には、括弧内の
Auth type
が付きます。-
ホスト : たとえば、
snowflake-demo.east-us-2.azure.snowflakecomputing.com
-
ポート : たとえば、
443
-
ユーザー : たとえば、
snowflake-user
-
(基本認証) パスワード : たとえば、
password123
-
(OAuth アクセス トークン) Access トークン : (オプション) からアクセス トークンをリクエスト OAuth アクセストークン。
-
(OAuthアクセストークン) 有効期限 (秒 単位): (オプション) OAuth アクセス トークンのリクエスト (
expires_in
) からのアクセス トークンの有効期限 (秒単位) です。 -
(OAuthの) クライアント ID : Snowflakeコンソールで、
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>')
を実行して、セキュリティ統合のクライアント ID を取得します。 -
(OAuthの) クライアントシークレット : Snowflakeコンソールで、
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('<security-integration-name>')
を実行して、セキュリティ統合のクライアントシークレットを取得します。 -
(OAuthの) OAuth スコープ :
refresh_token session:role:<role-name>
.使用するSnowflakeロールを<role-name>
で指定します。 -
(OAuthの) Snowflakeでサインイン : クリックし、OAuth 資格情報を使用して Snowflake にサインインします。
-
(PEM秘密鍵) PEM秘密鍵 :HEX64形式のRSAキーパーからの秘密鍵。
-
(PEM秘密鍵) 有効期限 (秒 ): 秘密鍵を使用して行われた接続の有効期限 (秒単位)。
サインインに成功すると、 接続のセットアップ ウィザードに戻ります。
-
-
接続の作成 をクリックします。
-
(基本認証) [接続の詳細 ] ページで、次の項目を指定します。
- ウェアハウスSnowflake : たとえば、
my-snowflake-warehouse
- (オプション) プロキシホスト : Snowflakeへの接続に使用されるプロキシのホスト。また、[ プロキシを使用する ] を選択し、[ プロキシ ポート ] を指定する必要もあります。
- (オプション) プロキシを使用 : プロキシサーバーを使用してSnowflakeに接続するかどうか。
- (オプション) プロキシポート : Snowflakeへの接続に使用されるプロキシのポート。また、[ プロキシの使用 ] を選択し、[ プロキシ ホスト ] を指定する必要もあります。
- (オプション) Snowflakeロール : 接続後のセッションに使用するデフォルトのセキュリティロール。
- ウェアハウスSnowflake : たとえば、
-
次へ をクリックします。
-
[カタログの基本 ] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。
-
(オプション)[ 接続をテスト ]をクリックして、動作することを確認します。
-
[ カタログを作成 ] をクリックします。
-
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある ] を選択するか、[ ワークスペースに割り当て ] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。
-
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
カタログに対する 権限を付与 します。[ 許可 ] をクリックします。
-
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
各プリンシパルに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSE
が付与されます。- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する権限を手動で選択します。
- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
-
次へ をクリックします。
-
[メタデータ] ページで、タグのキーと値のペアを指定します。詳細については、「Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
-
(オプション)コメントを追加します。
-
保存 をクリックします。
ノートブックまたはDatabricks SQLクエリーエディタで次のコマンドを実行します。
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user '<user>',
password '<password>'
);
資格情報などの機密性の高い値には、プレーンテキスト文字列の代わりに Databricks シークレット を使用することをお勧めします。例えば:
CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
host '<hostname>',
port '<port>',
sfWarehouse '<warehouse-name>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>')
)
シークレットの設定に関する情報については、「 シークレット管理」を参照してください。
フォーリンカタログの作成
UI を使用してデータソースへの接続を作成する場合は、フォーリンカタログの作成が含まれているため、この手順をスキップできます。
フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、DatabricksとUnity Catalogを使用して、そのデータベース内のデータへのアクセスを管理できます。フォーリンカタログを作成するには、すでに定義されているデータソースへの接続を使用します。
フォーリンカタログを作成するには、Catalog ExplorerCREATE FOREIGN CATALOG
SQL を使用するか、Databricks ノートブックまたは クエリSQL エディターの コマンドを使用します。Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。 POST /api/2.1/unity-catalog/catalogs を参照してください。 および Unity Catalog コマンド。
必要な権限: メタストアの CREATE CATALOG
権限、接続の所有権または接続の CREATE FOREIGN CATALOG
権限。
- Catalog Explorer
- SQL
-
Databricks ワークスペースで、
[カタログ]をクリックして カタログエクスプローラー を開きます。
-
カタログ ペインの上部で、
追加 アイコンをクリックし、メニューから[ カタログを追加 ]を選択します。
または、 クイックアクセス ページから[ カタログ ]ボタンをクリックし、[ カタログを作成 ]ボタンをクリックします。
-
「カタログの作成」のフォーリンカタログの作成手順に従います。
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。括弧内の項目はオプションです。プレースホルダーの値を置き換えます。
<catalog-name>
:Databricksのカタログの名前。<connection-name>
: データソース、パス、およびアクセス認証情報を指定する 接続オブジェクト 。<database-name>
:Databricksでカタログとしてミラーリングするデータベースの名前。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');
大文字と小文字を区別するデータベース識別子
フォーリンカタログの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 |
OAuth の制限
OAuth サポートの制限は次のとおりです。
- Snowflake OAuth エンドポイントは、Databricks コントロールプレーン IP からアクセスできる必要があります。 「Databricks コントロール プレーンからの送信 IP」を参照してください。Snowflake は、セキュリティ統合レベルでのネットワーク ポリシーの設定をサポートしており、これにより、 Databricks コントロール プレーンから OAuth エンドポイントへの直接接続を可能にする別のネットワーク ポリシーを使用して承認を行うことができます。
- プロキシの使用 、 プロキシホスト 、 プロキシポート 、およびSnowflakeロール構成オプションはサポートされていません。 Snowflake ロール を OAuth スコープの一部として指定します。
PEM 秘密鍵の制限
PEM 秘密鍵のサポート制限は次のとおりです。
-
Snowflake JDBC ドライバーは、暗号化された秘密キーによる認証をサポートしていません。 エラーを回避するには、次のように
-nocrypt
オプションを追加したキーを生成します。openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
追加のリソース
Snowflakeドキュメンテーションの次の記事をご参照ください。