この記事では、Azure Databricks で管理されていない Salesforce Data Cloud データに対してフェデレーション クエリを実行するように、Lakehouse フェデレーションを設定する方法について説明します。 Lakehouse フェデレーションの詳細については、「Lakehouse フェデレーションとは?」を参照してください。
Lakehouse フェデレーションを使用して Salesforce Data Cloud データベースに接続するには、Azure Databricks の Unity Catalog メタストアに次のものを作成する必要があります。
- Salesforce Data Cloud データベースへの "接続"。
- Unity Catalog に Salesforce Data Cloud データベースをミラーリングする "外部カタログ"。これにより、Unity Catalog のクエリ構文とデータ ガバナンス ツールを使用して、Azure Databricks ユーザーによるデータベースへのアクセスを管理できるようになります。
どの Salesforce コネクタを使用する必要がありますか?
Databricks には、Salesforce 用の複数のコネクタが用意されています。 コピーが 0 の 2 つのコネクタがあります。Salesforce Data Cloud ファイル共有コネクタと Salesforce Data Cloud クエリ フェデレーション コネクタです。 これにより、Salesforce Data Cloud 内のデータを移動せずにクエリを実行できます。 Salesforce Data Cloud や Salesforce Sales Cloud など、さまざまな Salesforce 製品からデータをコピーする Salesforce インジェスト コネクタもあります。
次の表は、Databricks の Salesforce コネクタの違いをまとめたものです。
コネクタ | 利用シーン | サポートされている Salesforce 製品 |
---|---|---|
Salesforce Data Cloud のファイル共有 | Lakehouse Federation で Salesforce Data Cloud ファイル共有コネクタを使用すると、Databricks は Salesforce Data-as-a-Service (DaaS) API を呼び出して、基になるクラウド オブジェクトの保存場所にあるデータを直接読み取ります。 クエリは、JDBC プロトコルを使用せずに Databricks コンピューティングで実行されます。 クエリのフェデレーションと比較して、ファイル共有は大量のデータのフェデレーションに最適です。 複数のデータ ソースからファイルを読み取るためのパフォーマンスが向上し、プッシュダウン機能が向上します。 Salesforce Data Cloud ファイル共有の Lakehouse フェデレーションを参照してください。 |
Salesforce Data Cloud |
Salesforce Data Cloud クエリの統合 | Lakehouse Federation で Salesforce Data Cloud クエリ フェデレーション コネクタを使用すると、Databricks は JDBC を使用してソース データに接続し、クエリを Salesforce にプッシュします。 Salesforce Data Cloud でのフェデレーション クエリの実行を参照してください。 | Salesforce Data Cloud |
Salesforce データ取り込み | Lakeflow Connect の Salesforce インジェスト コネクタを使用すると、Salesforce Data Cloud と Salesforce Sales Cloud のデータを含む、Salesforce Platform データからフル マネージドのインジェスト パイプラインを作成できます。 このコネクタは、CDP データだけでなく、データ インテリジェンス プラットフォームの CRM データも活用することで、価値を最大化します。 Salesforceからデータを取り込む |
Salesforce Data Cloud、Salesforce Sales Cloud など。 サポートされている Salesforce 製品の包括的な一覧については、 Salesforce インジェスト コネクタでサポートされている Salesforce 製品を参照してください。 |
開始する前に
ワークスペースの要件:
- Unity Catalog を使用できるワークスペース。
コンピューティングの要件:
- コンピューティング リソースからターゲット データベース システムへのネットワーク接続。 「Lakehouse フェデレーションのためのネットワークに関する推奨事項」を参照してください。
- Azure Databricks コンピューティングでは、Databricks Runtime 15.2 以降と標準または専用アクセス モードを使用する必要があります。
- SQL ウェアハウスはプロまたはサーバーレスである必要があり、2024.30 以降を使用する必要があります。
必要なアクセス許可は次のとおりです。
- 接続を作成するには、メタストア管理者であるか、ワークスペースにアタッチされている Unity Catalog メタストアに対する
CREATE CONNECTION
特権を持つユーザーである必要があります。 - 外部カタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
特権を持っている必要があります。
追加の権限要件は、以下の各タスク ベースのセクションで規定されています。
Salesforce 接続アプリを作成する
Salesforce 接続アプリを使用すると、API と標準プロトコルを使用して外部アプリを Salesforce と統合できます。 このセクションでは、SSO を使用して接続アプリを作成し、Databricks が Salesforce で認証できるようにする方法について説明します。
注意
詳細な手順については、Salesforce Data Cloud のドキュメントの 「接続アプリを作成する」を参照してください。
Salesforce 接続アプリを作成するには、次の手順を行います。
- Data Cloud の右上にある [セットアップ] をクリックします。
- [プラットフォーム ツール] で、[アプリケーション] > [アプリケーション マネージャー] の順にクリックします。
- [新しい接続アプリ] をクリックします。
- 名前と連絡先のメール アドレスを入力します。
-
OAuth の設定 を有効にします。
-
の形式で
https://<databricks_instance_url>/login/oauth/salesforce.html
を入力します。 例:https://cust-success.cloud.databricks.com/login/oauth/salesforce.html
。 - (省略可能) 次の手順で SQL を使用して Azure Databricks 接続と外部カタログを作成する予定の場合は、Salesforce 接続アプリでもリダイレクト URI
https://login.salesforce.com/services/oauth2/success
をサポートする必要があります。 これは、カタログ エクスプローラーを使用して Azure Databricks 接続と外部カタログを作成する場合は必要ありません。 Databricks では、手動の手順が他の方法よりも少なくて済むため、カタログ エクスプローラーを使用することを推奨しています。 - 次のスコープを追加します。
- すべての Data Cloud API リソースにアクセスする (cdp_api)
- API を使用してユーザー データを管理する (api)
- Data Cloud データで ANSI SQL クエリを実行する (cdp_query_api)
- いつでも要求を実行する (refresh_token, offline_access)
- [保存] をクリックします。
- [続行]をクリックします。
-
の形式で
- [接続アプリの概要] ページで、[コンシューマーの詳細の管理] をクリックします。 認証を求められます。
- 認証が成功すると、コンシューマー キーとコンシューマー シークレットが表示されます。 これらの値を保存します。 Azure Databricks 接続を作成するときに必要になります。
Azure Databricks 接続を作成する
接続では、外部データベース システムにアクセスするためのパスと資格情報を指定します。 接続を作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは Databricks SQL クエリ エディターで CREATE CONNECTION
SQL コマンドを使用します。
注意
Databricks REST API または Databricks CLI を使用して接続を作成することもできます。 POST /api/2.1/unity-catalog/connections および Unity Catalog コマンドを参照してください。
必要な権限: メタストア管理者、または CREATE CONNECTION
特権を持つユーザー。
カタログ エクスプローラー
Azure Databricks ワークスペースで、[
カタログ。
[カタログ] ペインの上部にある
[追加] アイコンをクリックして、メニューから [接続の追加] を選びます。
または、[
クイック アクセス ] ページで、[外部データ ] ボタンをクリックし、[接続 ] タブに移動し、[接続作成] をクリックします。 接続 のセットアップ ウィザードの [接続の基本] ページで、わかりやすい 接続名入力します。
接続の種類として Salesforce Data Cloud を選択します。
(省略可能) コメントを追加します。
[認証] ページで、Salesforce Data Cloud の次の接続プロパティを入力します。
- (省略可能) を選択すると、サンドボックスになります。
- クライアント ID: Salesforce に接続されたアプリ コンシューマー キー。
- クライアント シークレット: Salesforce 接続アプリのコンシューマー シークレット。
-
クライアント スコープ:
cdp_api api cdp_query_api refresh_token offline_access
[Salesforce でサインイン] をクリックします。
(OAuth) SSO 資格情報を使用して Salesforce Data Cloud にサインインするように求められます。
ログインに成功すると、Databricks 接続 設定ウィザードに戻ります。 [Salesforce でサインイン] ボタンが
Successfully authorized
というメッセージに置き換わりました。[接続の作成] をクリックします。
[Catalog basics]\(カタログの基本\) ページで、外部カタログの名前を入力します。 外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。
Salesforce データ スペースを入力します。
(省略可能) [接続のテスト] をクリックして、動作することを確認します。
[カタログ作成] をクリックします。
[Access] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。 [すべてのワークスペースがアクセスできる] を選択することも、[ワークスペースに割り当てる] をクリックし、ワークスペースを選択して [割り当て] をクリックすることもできます。
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。 テキスト ボックスへのプリンシパルの入力を始めた後、返された結果でプリンシパルをクリックします。
カタログに対する特権を付与します。 [許可] をクリックします。
- カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。 テキスト ボックスへのプリンシパルの入力を始めた後、返された結果でプリンシパルをクリックします。
- 各プリンシパルに付与する 特権プリセット を選択します。 既定では、すべてのアカウント ユーザーに
BROWSE
が付与されます。- ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウン メニュー データ エディター を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する特権を手動で選択します。
- ドロップダウン メニューから [データ 閲覧者 を選択して、カタログ内のオブジェクトに対する
- [付与] をクリックします。
[次へ] をクリックします。
[メタデータ] ページで、タグのキーと値のペアを指定します。 詳細については、「Unity カタログのセキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
(省略可能) コメントを追加します。
[保存] をクリックします。
SQL
Databricks では、手動の手順が他の方法よりも少なくて済むため、接続と外部カタログの作成に Catalog Explorer を使用することを推奨しています。
SQL を使用して Azure Databricks 接続と外部カタログを作成する予定の場合は、Salesforce 接続アプリでリダイレクト URI https://login.salesforce.com/services/oauth2/success
をサポートする必要があります。 カタログ エクスプローラーを使用する場合、これは必要ありません。
PKCE コード検証コードとコード チャレンジ コードを生成します。 生成するには、https://tonyxu-io.github.io/pkce-generator/ などのオンラインツールを使用するか、次の Python スクリプトを実行します。
%python import base64 import re import os import hashlib code_verifier = base64.urlsafe_b64encode(os.urandom(40)).decode('utf-8') code_verifier = re.sub('[^a-zA-Z0-9]+', '', code_verifier) code_challenge = hashlib.sha256(code_verifier.encode('utf-8')).digest() code_challenge = base64.urlsafe_b64encode(code_challenge).decode('utf-8') code_challenge = code_challenge.replace('=', '') print(f"pkce_verifier = \"{code_verifier}\"") print(f"code_challenge = \"{code_challenge}\"")
次の URL にアクセスし、Salesforce の資格情報を使用して認証を行い、
authorization_code
を取得します (<client_id>
と<code_challenge>
を実際のパラメーターに置き換えます)。https://login.salesforce.com/services/oauth2/authorize ?client_id=<client_id> &redirect_uri=https://login.salesforce.com/services/oauth2/success &response_type=code &code_challenge=<code_challenge>
URL でエンコードされた認証コードが、リダイレクトされた URL に表示されます。
ノートブックまたは Databricks SQL クエリ エディターで次のコマンドを実行します。
CREATE CONNECTION '<Connection name>' TYPE salesforce_data_cloud OPTIONS ( client_id '<Consumer key from Salesforce Connected App>', client_secret '<Consumer secret from Salesforce Connected App>', pkce_verifier '<pkce_verifier from the last step>', authorization_code '<URL decoded `authorization_code`, should end with == instead of %3D%3D>', oauth_redirect_uri "https://login.salesforce.com/services/oauth2/success", oauth_scope "cdp_api api cdp_query_api refresh_token offline access", is_sandbox "false" );
Databricks では、資格情報などの機密性の高い値にはプレーンテキスト文字列ではなく Azure Databricks のシークレットを使用することを推奨しています。 次に例を示します。
CREATE CONNECTION '<Connection name>' TYPE salesforce_data_cloud OPTIONS ( client_id secret ('<Secret scope>','<Secret key client id>'), client_secret secret ('<Secret scope>','<Secret key client secret>'), pkce_verifier '<pkce_verifier from the last step>', authorization_code '<URL decoded `authorization_code`, should end with == instead of %3D%3D>', oauth_redirect_uri "https://login.salesforce.com/services/oauth2/success", oauth_scope "cdp_api api cdp_query_api refresh_token offline access", is_sandbox "false" );
シークレットの設定については、「シークレットの管理」を参照してください。
外部カタログを作成する
注意
UI を使用してデータ ソースへの接続を作成する場合は、外部カタログの作成が含まれるので、この手順は省略できます。
外部カタログは、外部データ システム内のデータベースをミラーリングし、Azure Databricks と Unity Catalog を使ってそのデータベース内のデータに対するクエリの実行とアクセス管理ができるようにします。 外部カタログを作成するには、定義済みのデータ ソースへの接続を使用します。
外部カタログを作成するには、Catalog Explorer を使用するか、Azure Databricks ノートブックまたは SQL クエリ エディターで CREATE FOREIGN CATALOG
SQL コマンドを使用します。 Databricks REST API または Databricks CLI を使用してカタログを作成することもできます。
POST /api/2.1/unity-catalog/catalogs および Unity Catalog コマンドを参照してください。
必要な権限:CREATE CATALOG
メタストアに対するアクセス許可と、接続の所有権または接続に対する CREATE FOREIGN CATALOG
特権。
カタログ エクスプローラー
- Azure Databricks ワークスペースで、[
カタログ をクリックしてカタログ エクスプローラーを開きます。
- 右上にある [カタログを作成] をクリックします。
- Salesforce Data Cloud カタログのプロパティを次のように入力します。
- カタログ名: カタログのわかりやすい名前。
-
種類:
Foreign
。 - 接続名: カタログを作成する接続の名前。
- データ スペース: Salesforce のデータ スペース。
- [作成] を選択します。
SQL
ノートブックまたは SQL クエリ エディターで次の SQL コマンドを実行します。 角かっこ内の項目は省略可能です。
CREATE FOREIGN CATALOG [IF NOT EXISTS] '<catalog-name>' USING CONNECTION '<connection-name>'
OPTIONS (dataspace '<dataspace>');
次の値を置き換えます。
-
<catalog-name>
: -
<connection-name>
: -
<dataspace>
: Salesforce のデータ スペース。 たとえば、「default
」のように入力します。
サポートされているプッシュダウン
以下のプッシュダウンがサポートされています。
- フィルター
- プロジェクション
- 制限
- 集計
- オフセット
- キャスト
- 含む、開始、終了
データ型マッピング
Salesforce Data Cloud から Spark に読み取る場合、データ型は次のようにマップされます。
Salesforce Data Cloud の型 | Spark の型 |
---|---|
ボーリアン | BooleanType |
日付 | デートタイプ |
日時 | タイムスタンプ型 |
メール、電話、テキスト、URL | 文字列型 |
数値、パーセント | DecimalType(38, 18) |
制限事項
- Databricks カタログごとに 1 つの Salesforce データ領域のみがサポートされます。
- Databricks Runtime 16.1 以前では、大文字と小文字を区別するテーブル名とスキーマ名はサポートされていません。 これには、Salesforce Data Cloud の大文字を持つ名前が含まれます。 たとえば、
MyTable
はサポートされていません。