次の方法で共有


Snowflake でフェデレーション クエリを実行する

この記事では、Azure Databricks で管理されていない Snowflake データに対してフェデレーション クエリを実行できるように、レイクハウス フェデレーションを設定する方法について説明します。 Lakehouse フェデレーションの詳細については、「Lakehouse フェデレーションとは」を参照してください。

レイクハウス フェデレーションを使って Snowflake データベースに接続するには、Azure Databricks の Unity Catalog メタストアで次のものを作成する必要があります。

  • Snowflake データベースへの "接続"。
  • Unity Catalog で Snowflake データベースをミラーリングする "外部カタログ"。これにより、Unity Catalog のクエリ構文とデータ ガバナンス ツールを使って、Azure Databricks ユーザーのデータベースへのアクセスを管理できるようになります。

開始する前に

ワークスペースの要件:

  • Unity Catalog を使用できるワークスペース。

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

  • Databricks Runtime クラスターまたは SQL ウェアハウスから対象となる データベース システムに接続するためのネットワーク接続。 「レイクハウス フェデレーションのためのネットワークに関する推奨事項」を参照してください。
  • Azure Databricks クラスターでは、Databricks Runtime 13.3 LTS 以降、および共有またはシングルユーザー アクセス モードを使用する必要があります。
  • SQL ウェアハウスは Pro またはサーバーレスである必要があり、かつ 2023.40 以上を使用する必要があります。

必要なアクセス許可:

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

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

  • OAuth を使用して認証する予定の場合は、Snowflake コンソールでセキュリティ統合を作成します。 詳細については、以下のセクションを参照してください。

(省略可能) Snowflake コンソールでセキュリティ統合を作成する

OAuth を使用して認証する場合は、Snowflake 接続を作成する前に、この手順に従います。 代わりにユーザー名とパスワードを使用して認証するには、このセクションをスキップしてください。

Note

Snowflake のネイティブ OAuth 統合のみがサポートされています。 Okta や Microsoft Entra ID などの外部 OAuth 統合はサポートされていません。

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

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

  • <workspace-url>: Azure Databricks ワークスペースの URL。 OAUTH_REDIRECT_URIhttps://<workspace-url>/login/oauth/snowflake.html に設定する必要があります。<workspace-url> は、Snowflake 接続を作成する Azure 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;

接続を作成する

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

Note

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

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

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

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

  2. [カタログ] ペインの上部にある 追加またはプラス アイコン [追加] アイコンをクリックし、メニューから [接続の追加] を選択します。

    または、[クイック アクセス] ページで、[外部データ >] ボタンをクリックし、[接続] タブに移動し、[接続の作成] をクリックします。

  3. わかりやすい接続名を入力します。

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

  5. Snowflake ウェアハウスの接続プロパティを以下のように入力します。

    • 認証の種類: OAuth または Username and password
    • ホスト: たとえば、snowflake-demo.east-us-2.azure.snowflakecomputing.com
    • ポート: たとえば、443
    • Snowflake ウェアハウス: たとえば、my-snowflake-warehouse
    • ユーザー: たとえば、snowflake-user
    • (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) クライアント スコープ: refresh_token session:role:<role-name><role-name> で使用する Snowflake ロールを指定します。
    • (ユーザー名とパスワード) パスワード: たとえば、password123

    (OAuth) OAuth 資格情報を使用して Snowflake にサインインするように求められます。

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

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

  8. Create をクリックしてください。

SQL

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

CREATE CONNECTION <connection-name> TYPE snowflake
OPTIONS (
  host '<hostname>',
  port '<port>',
  sfWarehouse '<warehouse-name>',
  user '<user>',
  password '<password>'
);

資格情報などの機密性の高い値には、プレーンテキストの文字列ではなく Azure 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>')
)

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

外部カタログを作成する

外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。

外部カタログを作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは SQL クエリ エディターで CREATE FOREIGN CATALOG SQL コマンドを使用します。

Note

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

必要なアクセス許可: メタストアに対する CREATE CATALOG アクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG 特権。

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

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

  2. [カタログ] ペインの上部にある 追加またはプラス アイコン [追加] アイコンをクリックし、メニューから [カタログの追加] を選択します。

    または、[クイック アクセス] ページで、[カタログ] ボタンをクリックし、[カタログの作成] ボタンをクリックします。

  3. カタログを作成する」で外部カタログを作成する手順に従います。

SQL

ノートブックまたは SQL クエリ エディターで次のコマンドを実行します。 角かっこ内の項目は省略可能です。 プレースホルダー値を次のように置き換えます。

  • <catalog-name>: Azure Databricks 内のカタログの名前。
  • <connection-name>: データ ソース、パス、アクセス資格情報を指定する接続オブジェクト
  • <database-name>: Azure 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> を二重引用符で囲む必要があります。

次に例を示します。

  • databaseDATABASE に変換されます

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

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

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

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

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

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

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

  • フィルター
  • プロジェクション
  • 制限
  • 結合
  • 集計 (Average、Corr、CovPopulation、CovSample、Count、Max、Min、StddevPop、StddevSamp、Sum、VariancePop、VarianceSamp)
  • 関数 (文字列関数、数学関数、データ関数、時刻関数、タイムスタンプ関数、その他 Alias、Cast、SortOrder などの関数)
  • Windows 関数 (DenseRank、Rank、RowNumber)
  • 並べ替え

データ型マッピング

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
Boolean BooleanType
date DateType
datetime、timestamp、timestamp_ltz、timestamp_ntz、timestamp_tz TimestampType

OAuth の制限事項

OAuth サポートの制限事項を次に示します。

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

その他のリソース