在 Salesforce Data Cloud 上執行聯合查詢
本文說明如何 set Up Lakehouse Federation,對 Azure Databricks 未管理的 Salesforce Data Cloud 數據執行同盟查詢。 若要深入了解 Lakehouse Federation,請參閱什麼是 Lakehouse Federation?。
若要使用 Lakehouse Federation 連線到 Salesforce Data Cloud 資料庫,您必須在 Azure Databricks Unity Catalog metastore 中建立下列項目:
- 與 Salesforce Data Cloud 資料庫的連線。
- 外部 catalog,可鏡像 Unity Catalog 中的 Salesforce Data Cloud 資料庫,讓您可以使用 Unity Catalog 查詢語法和數據控管工具來管理 Azure Databricks 使用者對資料庫的存取權。
開始之前
工作區需求:
- 針對 Unity Catalog啟用工作區。
計算需求:
- 您的計算資源與目標資料庫系統之間的網路連接能力。 請參閱 Lakehouse Federation 的網路建議。
- Azure Databricks 計算必須使用 Databricks Runtime 15.2 或更新版本,並且採用 共用(Shared) 或 單一使用者(Single user) 存取模式(access mode)。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2024.30 或更新版本。
所需的權限:
- 若要建立連線,您必須是中繼存放區系統管理員或具有附加至工作區之 Unity Catalog 中繼存放區
CREATE CONNECTION
許可權的使用者。 - 若要建立外部 catalog,您必須擁有中繼存放區的
CREATE CATALOG
權限,而且必須是連線的擁有者,或者具備連線的CREATE FOREIGN CATALOG
權限。
後續每個以任務為基礎的區段會指定其他權限需求。
建立 Salesforce 連線應用程式
Salesforce 連線應用程式可讓外部應用程式使用 API 和標準通訊協定與 Salesforce 整合。 本節說明如何使用 SSO 建立連線應用程式,以允許 Databricks 向 Salesforce 進行驗證。
注意
如需更詳細的說明,請參閱 Salesforce Data Cloud 文件中的建立連線應用程式。
若要建立 Salesforce 連線應用程式,請執行下列動作:
- 在 Data Cloud 右上角,按一下 [設定]。
- 在 [平台工具] 底下,按一下 [應用程式 應用程式管理員]。>
- 按一下 [新增連線應用程式]。
- 輸入 [名稱] 和 [連絡人] 電子郵件地址。
- 啟用 [OAuth 設定]:
- 以下列格式輸入 [回撥 URL]:。
https://<databricks_instance_url>/login/oauth/salesforce.html
例如:https://cust-success.cloud.databricks.com/login/oauth/salesforce.html
。 - (選擇性)如果您打算在下一個步驟中使用 SQL 來建立 Azure Databricks 連線和外部 catalog,您的 Salesforce 連線應用程式也需要支援重新導向 URI
https://login.salesforce.com/services/oauth2/success
。 如果您打算使用 Catalog Explorer 來建立 Azure Databricks 連線以及與外部 catalog的連接,那麼這一項是不需要的。 Databricks 建議使用 Catalog Explorer,因為它需要比其他方法更少的手動步驟。 - 新增下列 [範圍]:
- 存取所有 Data Cloud API 資源 (cdp_api)
- 透過 API 管理使用者資料 (api)
- 對 Data Cloud 資料執行 ANSI SQL 查詢 (cdp_query_api)
- 隨時執行要求 (refresh_token、offline_access)
- 按一下 [檔案] 。
- 按一下繼續。
- 以下列格式輸入 [回撥 URL]:。
- 在 [連線應用程式概觀] 頁面上,按一下 [管理取用者詳細資料]。 系統會提示您進行驗證。
- 成功驗證之後,就會顯示 [取用者金鑰] 和 [取用者祕密]。 儲存這些 values。 建立 Azure Databricks 連線時,將需要它們。
建立 Azure Databricks 連線
連線會指定存取外部資料庫系統的路徑和 credentials。 若要建立連線,您可以在 Azure Databricks 筆記本或 Databricks SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE CONNECTION
SQL 命令。
注意
您也可使用 Databricks REST API 或 Databricks CLI 來建立連線。 請參閱 POST /api/2.1/unity-catalog/connections 和 Unity Catalog 命令。
需要的權限:具有 CREATE CONNECTION
權限的中繼存放區系統管理員或使用者。
Catalog 探索者
- 在 Azure Databricks 工作區中,按兩下 Catalog。
- 在左窗格中,展開 [外部數據] 功能表,然後 selectConnections。
- 按一下 [建立連線]。
- 輸入方便使用的 [連線名稱]。
salesforce Data Cloud 連線類型。 - 輸入 Salesforce Data Cloud 的下列連線屬性。
-
驗證類型:
OAuth
-
沙箱是否為
false
- (OAuth) 用戶端密碼:Salesforce 連線應用程式取用者祕密
- (OAuth) 用戶端識別碼:Salesforce 連線應用程式取用者金鑰
- (OAuth) 用戶端範圍:
cdp_api api cdp_query_api refresh_token offline_access
-
驗證類型:
- 按一下 [使用 Salesforce 登入]。
- (OAuth)系統會提示您使用 SSO credentials登入 Salesforce Data Cloud。
- 成功登入後,會將您導向回 Databricks [建立連線] 頁面。 [使用 Salesforce 登入] 按鈕已取代為 訊息。
Successfully authorized
- (選用) 新增註解。
- 按一下 [建立]。
SQL
Databricks 建議使用 Catalog Explorer 來建立連線和外鍵 catalog,因為這樣比其他方法需要更少的手動步驟。
如果您打算使用 SQL 來建立 Azure Databricks 連線和外部 catalog,您的 Salesforce 連線應用程式必須支援重新導向 URI https://login.salesforce.com/services/oauth2/success
。 如果您使用 Catalog Explorer,就不需要這個。
Generate 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 credentials 進行驗證,以 get
authorization_code
(以您的 parameters取代<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 秘密,而不是純文本字串,例如 credentials等敏感性 values。 例如:
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" );
如需設定祕密的相關資訊,請參閱祕密管理。
建立外部 catalog
外部 catalog 會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity Catalog查詢和管理該資料庫中數據的存取權。 若要建立外部 catalog,您可以使用已定義的數據源連線。
若要建立外部 catalog,您可以在 Azure Databricks 筆記本或 SQL 查詢編輯器中使用 Catalog Explorer 或 CREATE FOREIGN CATALOG
SQL 命令。
注意
您也可以使用 Databricks REST API 或 Databricks CLI 來建立 catalog。 請參閱 POST /api/2.1/unity-catalog/catalogs 和 Unity Catalog 命令。
必要權限:中繼存放區的 CREATE CATALOG
權限,以及連線的所有權或連線的 CREATE FOREIGN CATALOG
權限。
Catalog 探險者
- 在 Azure Databricks 工作區中,按兩下 [Catalog 以開啟 Catalog Explorer。
- 在右上方,按一下 [建立] Catalog。
- 輸入 Salesforce Data Cloud catalog的下列屬性。
- Catalog 名稱:供 catalog使用者易於記憶的名稱。
-
類型:
Foreign
。 - 連接名稱:將會建立 catalog 的連接名稱。
- 資料空間:Salesforce 資料空間。
- 按一下 [建立]。
SQL
在筆記本或 SQL 查詢編輯器中執行下列 SQL 命令。 括弧中的項目是可選內容。
CREATE FOREIGN CATALOG [IF NOT EXISTS] '<catalog-name>' USING CONNECTION '<connection-name>'
OPTIONS (dataspace '<dataspace>');
取代下列 values:
-
<catalog-name>
: -
<connection-name>
: -
<dataspace>
:Salesforce 資料空間。 例如:default
。
支援下推
支援下列下推:
- 篩選
- 投影
- Limit
- 彙總
- Offset
- Cast
- Contains、Startswith、Endswith
資料類型對應
當您從 Salesforce Data Cloud 讀取至 Spark 時,資料類型會對應如下:
Salesforce Data Cloud 類型 | Spark 類型 |
---|---|
布林值 | BooleanType |
Date | DateType |
Datetime | TimestampType |
電子郵件、電話、文字、URL | StringType |
Number、Percent | DecimalType(38, 18) |
限制
- 每個 Databricks catalog 僅支援一個 Salesforce 資料空間。
其他資源
Lakehouse 同盟不會 不支援 Salesforce Sales Cloud 的只讀 connections,但 LakeFlow Connect 可讓您將數據從 Salesforce Sales Cloud 擷取到 Databricks Lakehouse。 查看 從 Salesforce 匯入數據。