本頁說明如何設定 Lakehouse 同盟,以在非 Azure Databricks 所管理的 Salesforce Data 360 資料上執行同盟查詢。 若要深入瞭解 Lakehouse 同盟,請參閱 什麼是 Lakehouse 同盟?
若要使用 Lakehouse Federation 連線到 Salesforce Data 360 資料庫,您必須在 Azure Databricks Unity Catalog 的中繼存放區中建立下列項目:
- 與您的 Salesforce Data 360 資料庫的 連線 。
- 在 Unity Catalog 中創建一個反映 Salesforce Data 360 資料庫的 外來目錄 ,讓您可以使用 Unity Catalog 查詢語法和資料控管工具來管理 Azure Databricks 使用者對資料庫的存取權。
我應該使用哪一個 Salesforce 連接器?
Databricks 為 Salesforce 提供多個連接器。 有兩個零副本連接器:Salesforce Data 360 (先前稱為 Data Cloud) 檔案共用連接器和 Salesforce Data 360 查詢聯合連接器。 這些可讓您在 Salesforce Data 360 中查詢資料,而無需移動資料。 還有一個 Salesforce 擷取連接器,可從各種 Salesforce 產品複製資料,包括 Salesforce Data 360 和 Salesforce Sales Cloud。
下表摘要說明 Databricks 中 Salesforce 連接器之間的差異:
| 連接器 | 用例 | 支援的 Salesforce 產品 |
|---|---|---|
| Salesforce Data 360 檔案共用 | 當您在 Lakehouse 同盟中使用 Salesforce Data 360 檔案共用連接器時,Databricks 會呼叫 Salesforce 資料即服務 (DaaS) API,以直接讀取基礎雲端物件儲存位置中的資料。 查詢會在 Databricks 計算上執行,而不使用 JDBC 通訊協定。 相較於查詢同盟,檔案共用很適合用來同盟大量數據。 它提供改善的效能,可從多個數據源讀取檔案,以及更好的下推功能。 請參閱 Salesforce Data 360 檔案共用的 Lakehouse 聯盟。 |
Salesforce 資料 360 |
| Salesforce Data 360 查詢聯盟 | 當您在 Lakehouse 同盟中使用 Salesforce Data 360 查詢同盟連接器時,Databricks 會使用 JDBC 連線到來源資料,並將查詢向下推送至 Salesforce。 請參閱 在 Salesforce Data 360 上執行聯合查詢。 | Salesforce 資料 360 |
| Salesforce 匯入 | Lakeflow Connect 中的 Salesforce 擷取連接器可讓您從 Salesforce Platform 資料建立完全受控的擷取管線。 此連接器不僅利用 CDP 數據,還能利用 Data Intelligence Platform 中的 CRM 數據,將價值最大化。 查看 從 Salesforce 匯入數據。 | 請參閱 Salesforce 擷取連接器支援哪些 Salesforce 產品? |
開始之前
工作區需求:
- 已為 Unity Catalog 啟用工作區。
計算需求:
- 您的計算資源與目標資料庫系統之間的網路連接能力。 請參閱 Lakehouse Federation 的網路建議。
- Azure Databricks 計算必須使用 Databricks Runtime 15.2 或更新版本和 標準 或 專用 存取模式。
- SQL 倉儲必須是專業或無伺服器,且必須使用 2024.30 或更新版本。
所需的權限:
- 若要建立連線,您必須是中繼存放區系統管理員,或是具有附加至工作區之 Unity 目錄中繼存放區
CREATE CONNECTION許可權的使用者。 - 若要建立外部目錄,您必須具有中繼存放區的
CREATE CATALOG許可權,而且必須是連線的擁有者,或具有連線CREATE FOREIGN CATALOG許可權。
後續每個以任務為基礎的區段會指定其他權限需求。
建立 Salesforce 連線應用程式
Salesforce 連線應用程式可讓外部應用程式使用 API 和標準通訊協定與 Salesforce 整合。 本節說明如何使用 SSO 建立連線應用程式,以允許 Databricks 向 Salesforce 進行驗證。
注意
如需更詳細的指示,請參閱 Salesforce Data 360 文件中的 建立連線應用程式 。
若要建立 Salesforce 連線應用程式,請執行下列動作:
- 在 Data 360 的右上角,按一下 [設定]。
- 在 [平台工具] 底下,按一下 [應用程式 應用程式管理員]。>
- 按一下 [新增連線應用程式]。
- 輸入 [名稱] 和 [連絡人] 電子郵件地址。
- 啟用 [OAuth 設定]:
- 以下列格式輸入 [回撥 URL]:。
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 360 API 資源 (cdp_api)
- 透過 API 管理使用者資料 (api)
- 對 Data 360 資料執行 ANSI SQL 查詢 (cdp_query_api)
- 隨時執行要求 (refresh_token、offline_access)
- 按一下 [儲存]。
- 按一下繼續。
- 以下列格式輸入 [回撥 URL]:。
- 在 [連線應用程式概觀] 頁面上,按一下 [管理取用者詳細資料]。 系統會提示您進行驗證。
- 成功驗證之後,就會顯示 [取用者金鑰] 和 [取用者祕密]。 儲存這些值。 當您建立 Azure Databricks 連線時,您將需要它們。
建立 Azure Databricks 連線
連接會指定用來存取外部資料庫系統的路徑和認證。 若要建立連線,您可以在 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 360 的「連線類型」。
(選用) 新增註解。
在 「驗證」 頁面上,輸入 Salesforce Data 360 的下列連線屬性:
- (選擇性)選取 為沙盒。
- 用戶端識別碼:Salesforce 連線的應用程式取用者密鑰。
- 客戶端密碼:Salesforce 連線的應用程式取用者密碼。
-
用戶端範圍:
cdp_api api cdp_query_api refresh_token offline_access
點擊 [使用 Salesforce登入]。
(OAuth)系統會提示您使用 SSO 憑證登入 Salesforce Data 360。
成功登入時,系統會將您導向回 Databricks 設定連線 精靈。 Salesforce 登入按鈕 已被
Successfully authorized訊息取代。按一下 [建立連線]。
在 目錄基礎 頁面上,輸入外國目錄的名稱。 外部目錄會鏡像外部數據系統中的資料庫,讓您可以使用 Azure Databricks 和 Unity 目錄來查詢和管理該資料庫中數據的存取權。
輸入 Salesforce 資料空間。
(選擇性)點擊 [測試連線] 以確認其是否正常運作。
點選 「建立目錄」。
在 [Access] 頁面上,選取使用者可以存取您所建立目錄的工作區。 您可以選取 所有工作區都有存取權,或點擊 指派給工作區,選取工作區,然後點擊 指派。
變更能夠管理目錄中所有物件存取權的 擁有者。 開始在文字框中輸入對象,然後點擊傳回結果中的對象。
將特權 授予於該目錄。 點擊 [授與 ]:
- 指定 主體 誰可以存取目錄中的物件。 開始在文字框中輸入對象,然後點擊傳回結果中的對象。
- 選取 許可權預設,以授與每個主體。 根據預設,所有帳戶用戶都會被授與
BROWSE。- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
read許可權。 - 從下拉功能表中選取 [數據編輯器],以授與目錄中物件的
read和modify許可權。 - 手動選取要授與的許可權。
- 從下拉功能表中選取 [數據讀取器],以授與目錄中物件
- 按一下 授與。
點選 [下一步]。
在 [元數據 頁面上,指定標記鍵-值組。 如需詳細資訊,請參閱 將標籤套用至 Unity Catalog 可保護的物件。
(選用) 新增註解。
按一下 [儲存]。
SQL
Databricks 建議使用目錄總管來建立連線和外部目錄,因為它需要比其他方法更少的手動步驟。
如果您打算使用 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 目錄來查詢和管理該資料庫中數據的存取權。 若要建立外部目錄,您可以使用已定義的數據源連線。
若要建立外部目錄,您可以在 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 360 目錄的下列屬性。
- 目錄名稱:目錄的用戶易記名稱。
-
類型:
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 360 讀取至 Spark 時,資料類型會對應如下:
| Salesforce Data 360 類型 | Spark 類型 |
|---|---|
| 布林值 | BooleanType |
| 日期 | 日期類型 |
| 日期時間 | 時間戳類型 |
| 電子郵件、電話、文字、URL | 字串類型 |
| Number、Percent | DecimalType(38, 18) |
限制
- 每個 Databricks 目錄僅支援一個 Salesforce 資料空間。
- 在 Databricks Runtime 16.1 和較舊版本中,不支援區分大小寫的數據表和架構名稱。 這包括 Salesforce Data 360 上具有大寫字母的名稱。 例如,
MyTable不支援 。