Salesforce Data Cloudで横串検索を実行する
この記事では、 Databricksによって管理されていないSalesforce Data Cloudデータに対して横串検索を実行するようにレイクハウスフェデレーションを設定する方法について説明します。 レイクハウスフェデレーションの詳細については、「 レイクハウスフェデレーションとは」を参照してください。
レイクハウスフェデレーションを使用してSalesforce Data Cloudデータベースに接続するには、 Databricks Unity Catalog メタストアに次のものを作成する必要があります。
- Salesforce Data Cloud データベースへの接続。
- Salesforce Data CloudUnity Catalog Unity Catalogデータベースを にミラーリングする フォーリンカタログ で、 クエリ構文とデータガバナンスツールを使用してデータベースへのDatabricks ユーザーアクセスを管理できます。
始める前に
ワークスペースの要件:
- Unity Catalogのワークスペースが有効になっています。
コンピュートの要件:
- コンピュート・リソースからターゲット・データベース・システムへのネットワーク接続。 「レイクハウスフェデレーションのネットワーキングに関する推奨事項」を参照してください。
- Databricks コンピュートは、 Databricks Runtime 15.2 以降と Standard または Dedicated アクセス モードを使用する必要があります。
- SQLウェアハウスは Pro または サーバレスで、2024.30 以上を使用している必要があります。
必要な権限:
- 接続を作成するには、メタストア管理者か、ワークスペースに接続されているUnity Catalogメタストアの
CREATE CONNECTION
権限を持つユーザーである必要があります。 - フォーリンカタログを作成するには、メタストアに対する
CREATE CATALOG
権限を持ち、接続の所有者であるか、接続に対するCREATE FOREIGN CATALOG
権限を持っている必要があります。
追加の権限要件は、以下の各タスクベースのセクションに記載しています。
Salesforce 接続アプリケーションの作成
Salesforce 接続アプリケーションを使用すると、外部アプリケーションを APIs プロトコルと標準プロトコルを使用して Salesforce と統合できます。 このセクションでは、SSO を使用して接続アプリを作成し、Databricks が Salesforce で認証できるようにする方法について説明します。
詳細な手順については、Salesforce Data Cloud ドキュメントの「 接続アプリケーションの作成 」を参照してください。
Salesforce 接続アプリケーションを作成するには、次の手順を実行します。
-
Data Cloud の右上にある [ 設定 ] をクリックします。
-
[プラットフォームツール ] で、[ アプリ] > [アプリマネージャー ] をクリックします。
-
[新しい接続アプリケーション ] をクリックします。
-
[名前 ] と [Contact Eメール アドレス] を入力します。
-
OAuth 設定 を有効にします。
-
コールバック URL を
https://<databricks_instance_url>/login/oauth/salesforce.html
の形式で入力します。たとえば、https://cust-success.cloud.databricks.com/login/oauth/salesforce.html
のようになります。 -
(オプション)次のステップで SQL を使用して Databricks 接続とフォーリンカタログを作成する予定の場合、Salesforce 接続アプリケーションでリダイレクト URI
https://login.salesforce.com/services/oauth2/success
もサポートする必要があります。 Catalog Explorer を使用して [ Databricks ] 接続とフォーリンカタログを作成する予定の場合、この操作は必要ありません。 Databricks では、他の方法よりも手動の手順が少なくて済むため、Catalog Explorer の使用をお勧めします。 -
次の スコープ を追加します。
- すべてのデータ クラウド API リソースにアクセス ( cdp_api )
- APIs( api )によるユーザーデータの管理
- データクラウドデータに対するANSI SQLクエリの実行( cdp_query_api )
- いつでもリクエストを実行( 更新、offline_access )
-
[ 保存 ]をクリックします。
-
「 続行 」をクリックします。
-
-
[接続アプリケーションの概要 ] ページで、[ コンシューマの詳細の管理 ] をクリックします。認証を求められます。
-
認証が成功すると、 コンシューマキー と コンシューマシークレット が表示されます。 これらの値を保存します。 これらは、Databricks 接続を作成するときに必要になります。
Databricks 接続を作成する
接続では、外部データベースシステムにアクセスするためのパスと認証情報を指定します。接続を作成するには、カタログエクスプローラーを使用するか、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 ワークスペースで、
カタログ をクリックします。
-
[カタログ]ウィンドウの上部にある [
追加] アイコンをクリックし、メニューから [ 接続の追加] を選択します。
または、 クイックアクセス ページから 外部データ > ボタンをクリックし、 接続 タブに移動して 接続を作成 をクリックします。
-
接続のセットアップ ウィザードの 接続の基本 ページで、わかりやすい 接続名 を入力します。
-
[接続の種類 ] で [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
メッセージに置き換えられました。 -
接続の作成 をクリックします。
-
[カタログの基本 ] ページで、フォーリンカタログの名前を入力します。フォーリンカタログは、外部データ・システム内のデータベースをミラーリングするため、 Databricks と Unity Catalogを使用して、そのデータベース内のデータへのアクセスをクエリおよび管理できます。
-
Salesforce データスペースを入力します。
-
(オプション)[ 接続をテスト ]をクリックして、動作することを確認します。
-
[ カタログを作成 ] をクリックします。
-
[ アクセス ] ページで、作成したカタログにユーザーがアクセスできるワークスペースを選択します。[ すべてのワークスペースにアクセス権がある ] を選択するか、[ ワークスペースに割り当て ] をクリックし、ワークスペースを選択して [ 割り当て] をクリックします。
-
カタログ内のすべてのオブジェクトへのアクセスを管理できる 所有者 を変更します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
カタログに対する 権限を付与 します。[ 許可 ] をクリックします。
-
カタログ内のオブジェクトにアクセスできる プリンシパル を指定します。テキスト ボックスにプリンシパルの入力を開始し、返された結果でプリンシパルをクリックします。
-
各プリンシパルに付与する 権限プリセット を選択します。デフォルトでは、すべてのアカウントユーザーに
BROWSE
が付与されます。- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
read
権限を付与します。 - ドロップダウンメニューから「 データエディタ 」を選択して、カタログ内のオブジェクトに対する
read
権限とmodify
権限を付与します。 - 付与する権限を手動で選択します。
- ドロップダウンメニューから「 データ閲覧者 」を選択して、カタログ内のオブジェクトに対する
-
付与 をクリックします。
-
-
次へ をクリックします。
-
[メタデータ] ページで、タグのキーと値のペアを指定します。詳細については、「Unity Catalog セキュリティ保護可能なオブジェクトにタグを適用する」を参照してください。
-
(オプション)コメントを追加します。
-
[ 保存 ]をクリックします。
Databricks カタログ エクスプローラを使用して接続とフォーリンカタログを作成することをお勧めします。これは、他の方法よりも手動の手順が少なくて済むためです。
SQL を使用して Databricks 接続とフォーリンカタログを作成する予定の場合、Salesforce 接続アプリケーションはリダイレクト URI https://login.salesforce.com/services/oauth2/success
をサポートしている必要があります。カタログエクスプローラーを使用する場合、これは必要ありません。
-
PKCE コード検証コードとコード チャレンジ コードを生成します。これを行うには、 https://tonyxu-io.github.io/pkce-generator/または、次の Python スクリプトを実行します。
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 クエリ エディターで次のコマンドを実行します。
SQLCREATE 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 では、資格情報などの機密性の高い値には、プレーンテキスト文字列の代わりに Databricks シークレット を使用することをお勧めします。例えば:
SQLCREATE 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 を使用してデータソースへの接続を作成する場合は、フォーリンカタログの作成が含まれているため、この手順をスキップできます。
フォーリンカタログは、外部データシステム内のデータベースをミラーリングするため、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 ワークスペースで、
[カタログ]をクリックして カタログエクスプローラー を開きます。
-
右上の [ カタログの作成 ] をクリックします。
-
Salesforce Data Cloud カタログの次のプロパティを入力します。
- カタログ名 : カタログのわかりやすい名前。
- タイプ :
Foreign
。 - 接続名 : カタログが作成される接続の名前。
- データスペース : Salesforce データスペース。
-
作成 をクリックします。
ノートブックまたはSQLクエリーエディタで次のSQLコマンドを実行します。括弧内の項目はオプションです。
CREATE FOREIGN CATALOG [IF NOT EXISTS] '<catalog-name>' USING CONNECTION '<connection-name>'
OPTIONS (dataspace '<dataspace>');
次の値を置き換えます。
<catalog-name>
:<connection-name>
:<dataspace>
: Salesforce データスペース。たとえば、default
.
サポートされているプッシュダウン
次のプッシュダウンがサポートされています。
- フィルター
- 予測
- 上限
- 集計
- offset
- キャスト
- 含む、開始、終了
データ型マッピング
Salesforce Data Cloud から Spark に読み取る場合、データ型は次のようにマップされます。
Salesforce Data Cloud タイプ | Spark タイプ |
---|---|
ブール値 | BooleanType |
日付 | DateType |
日時型 | TimestampType |
Eメール, 電話, テキスト, URL | StringType |
数、パーセント | 十進数タイプ (38、18) |
制限
- Databricks カタログごとに 1 つの Salesforce データ領域のみがサポートされています。
- Databricks Runtime 16.1 以前では、大文字と小文字を区別するテーブル名とスキーマ名はサポートされていません。これには、Salesforce Data Cloud で大文字が使用されている名前も含まれます。たとえば、
MyTable
はサポートされていません。
追加のリソース
レイクハウスフェデレーションは、Salesforce Sales Cloudへの読み取り専用接続 をサポートしていません が、 LakeFlow Connect では、Salesforce Sales Cloudから Databricks レイクハウスにデータを取り込むことができます。 「Salesforce からのデータの取り込み」を参照してください。