分享方式:


使用 Azure Data Factory 或 Azure Synapse Analytics 從 Salesforce 複製資料或將資料複製到該處

適用於:Azure Data Factory Azure Synapse Analytics

提示

試用 Microsoft Fabric 中的 Data Factory,這是適用於企業的全方位分析解決方案。 Microsoft Fabric 涵蓋從資料移動到資料科學、即時分析、商業智慧和報告的所有項目。 了解如何免費開始新的試用

此文章概述如何使用 Azure Data Factory 和 Azure Synapse 管線中的「複製活動」,從 Salesforce 複製資料或將資料複製到該處。 本文是根據複製活動概觀一文,該文提供複製活動的一般概觀。

重要

新的 Salesforce 連接器提供改善的原生 Salesforce 支援。 如果您在解決方案中使用舊版 Salesforce 連接器,請在 2024 年 10 月 11 日之前升級 Salesforce 連接器。 如需舊版與最新版本之間差異的詳細資料,請參閱本節

支援的功能

此 Salesforce 連接器支援下列功能:

支援的功能 IR
複製活動 (來源/接收) ① ②
查閱活動 ① ②

① Azure 整合執行階段 ② 自我裝載整合執行階段

如需支援作為來源或接收器的資料存放區清單,請參閱支援的資料存放區表格。

具體而言,這個 Salesforce 連接器支援:

  • Salesforce Developer、Professional、Enterprise 或 Unlimited 版本。
  • 將資料從自訂網域複製並複製到自訂網域 (可以同時在生產環境與沙箱環境中設定自訂網域)。

您可以透過連結服務中的 apiVersion 屬性,以明確設定用來讀取/寫入資料的 API 版本。 您要將資料複製到 Salesforce 時,連接器會使用 BULK API 2.0。

必要條件

  • 必須在 Salesforce 中啟用 API 權限。

  • 您需要在 Salesforce 入口網站中設定連線應用程式,以參考此官方文件本文建議中的逐步指導方針。

    重要

    • 執行使用者必須具有僅限 API 權限。
    • 可以透過工作階段原則變更存取權杖到期時間 (而不是重新整理權杖)。

Salesforce Bulk API 2.0 限制

我們使用 Salesforce Bulk API 2.0 來查詢和內嵌資料。 會自動在 Bulk API 2.0 中為您建立批次。 每個輪替 24 小時期間最多可以提交 15,000 個批次。 如果批次超過限制,您就會發生失敗。

在 Bulk API 2.0 中,只有內嵌作業會取用批次。 查詢作業不會取用批次。 如需詳細資料,請參閱 Bulk API 2.0 開發人員指南中的要求處理方式

如需詳細資料,請參閱 Salesforce 開發人員限制中的「一般限制」一節。

開始使用

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立 Salesforce 的連結服務

使用下列步驟,在 Azure 入口網站 UI 中建立 Salesforce 的連結服務。

  1. 前往 Azure Data Factory 或 Synapse 工作區的 [管理] 索引標籤,選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 Salesforce,然後選取 Salesforce 連接器。

    Salesforce 連接器的螢幕擷取畫面。

  3. 設定服務詳細資料,測試連線,然後建立新的連結服務。

    Saleforce 的連結服務設定螢幕擷取畫面。

連接器設定詳細資料

下列各節提供屬性的相關詳細資料,這些屬性是用來定義 Salesforce 連接器專屬的實體。

連結服務屬性

以下是針對 Salesforce 連結服務支援的屬性。

屬性 描述 必要
type type 屬性必須設為:SalesforceV2 Yes
environmentUrl 指定 Salesforce 執行個體的 URL。
例如,指定 "https://<domainName>.my.salesforce.com" 從自訂網域複製資料。 請參閱本文章了解如何設定或檢視自訂網域。
Yes
authenticationType 用來連接到 Salesforce 的驗證類型。
允許的值為 OAuth2ClientCredentials
Yes
clientId 指定 Salesforce OAuth 2.0 連線應用程式的用戶端識別碼。 如需詳細資訊,請移至此文章 Yes
clientSecret 指定 Salesforce OAuth 2.0 連線應用程式的用戶端密碼。 如需詳細資訊,請移至此文章 Yes
apiVersion 指定要使用的 Salesforce Bulk API 2.0 版本,例如 52.0。 Bulk API 2.0 僅支援 API 版本 >= 47.0。 若要了解 Bulk API 2.0 版本,請參閱文章。 如果您使用較低的 API 版本,就會發生失敗。 Yes
connectVia 用來連線到資料存放區的整合執行階段。 如果未指定,就會使用預設的 Azure Integration Runtime。 No

範例:儲存認證

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": "<environment URL>",
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "SecureString",
                "value": "<client secret>"
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

範例:在 Key Vault 中儲存認證

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": "<environment URL>",
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client secret in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

範例:在 Key Vault 中儲存認證,以及 environmentUrl 和 clientId

您可以將認證儲存在 Key Vault 中,以及 environmentUrl 和 clientId,以較長時間使用 UI 來編輯設定。 必須核取 [以 JSON 格式指定動態內容] 核取方塊,且您必須手動進行此設定。 此案例的優點是您可以從 Key Vault 取得 ALL 組態設定,而不是參數化此處的內容。

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of environment URL in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client ID in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "clientSecret": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client secret in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

資料集屬性

如需可用來定義資料集的區段和屬性完整清單,請參閱資料集一文。 本節提供 Salesforce 資料集所支援的屬性清單。

若要從 Salesforce 複製資料和將資料複製到 Salesforce,請將資料集的 type 屬性設為 SalesforceV2Object。 以下是支援的屬性。

屬性 描述 必要
type type 屬性必須設為:SalesforceV2Object Yes
objectApiName 要從其中擷取資料的 Salesforce 物件名稱。 否 (來源,如果已指定來源中的「SOQLQuery」);是 (接收)
reportId 要從中擷取資料的 Salesforce 報告識別碼。 其在接收中不受支援。 使用報告時有限制 否 (來源,如果已指定來源中的「SOQLQuery」);不支援接收

重要

所有自訂物件的 [API 名稱]都要有 "__c" 部分。

Salesforce 連線 API 名稱

範例:

{
    "name": "SalesforceDataset",
    "properties": {
        "type": "SalesforceV2Object",
        "typeProperties": {
            "objectApiName": "MyTable__c"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Salesforce linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

複製活動屬性

如需可用來定義活動的區段和屬性完整清單,請參閱管線一文。 本節提供 Salesforce 來源和接收所支援的屬性清單。

Salesforce 作為來源類型

若要從 Salesforce 複製資料,請將複製活動中的來源類型設定為 SalesforceV2Source。 複製活動的 [來源] 區段支援下列屬性。

屬性 描述 必要
type 複製活動來源的 type 屬性必須設為 SalesforceV2Source Yes
SOQLQuery 使用自訂查詢來讀取資料。 您只能使用具有限制的 Salesforce Object Query Language (SOQL) 查詢。 如需 SOQL 限制,請參閱這篇文章。 如果未指定查詢,將會在資料集內擷取 "ObjectApiName/reportId" 中所指定 Salesforce 物件的所有資料。 否 (如果在資料集中指定 "ObjectApiName/reportId")
includeDeletedObjects 指出是要查詢現有記錄,還是要查詢包含已刪除記錄在內的所有記錄。 如果未指定,預設行為為 False。
允許的值:false (預設值)、true
No

重要

所有自訂物件的 [API 名稱]都要有 "__c" 部分。

Salesforce 連線 API 名稱清單

範例:

"activities":[
    {
        "name": "CopyFromSalesforce",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Salesforce input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SalesforceV2Source",
                "SOQLQuery": "SELECT Col_Currency__c, Col_Date__c, Col_Email__c FROM AllDataType__c",
                "includeDeletedObjects": false
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Salesforce 作為接收類型

若要將資料複製到 Salesforce,請將複製活動中的接收類型設定為 SalesforceV2Sink。 複製活動的 [接收] 區段支援下列屬性。

屬性 描述 必要
type 複製活動接收的 type 屬性必須設為 SalesforceV2Sink Yes
writeBehavior 作業的寫入行為。
允許的值為 InsertUpsert
否 (預設為 Insert)
externalIdFieldName upsert 作業的外部識別碼欄位名稱。 指定的欄位在 Salesforce 物件中必須定義為「外部識別碼欄位」。 對應的輸入資料中不能有 NULL 值。 是 (用於 upsert)
writeBatchSize 每個批次中寫入 Salesforce 的資料列計數。 建議將此值從 10,000 設定為 200,000。 每個批次中的資料列太少,可降低複製效能。 每個批次中的資料列數太多,可能會導致 API 逾時。 否 (預設為 100,000)
ignoreNullValues 指出在寫入作業期間是否要忽略輸入資料中的 NULL 值。
允許的值為 truefalse
- true:執行 upsert 或更新作業時,讓目的地物件中的資料保持不變。 執行插入作業時,插入已定義的預設值。
- false:執行 upsert 或更新作業時,將目的地物件中的資料更新為 NULL。 執行插入作業時,插入 NULL 值。
否 (預設值為 false)
 maxConcurrentConnections 在活動執行期間建立至資料存放區的同時連線上限。 僅在想要限制並行連線時,才需要指定值。  否

範例:複製活動中的 Salesforce 接收

"activities":[
    {
        "name": "CopyToSalesforce",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Salesforce output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SalesforceV2Sink",
                "writeBehavior": "Upsert",
                "externalIdFieldName": "CustomerId__c",
                "writeBatchSize": 10000,
                "ignoreNullValues": true
            }
        }
    }
]

Salesforce 的資料類型對應

從 Salesforce 複製資料時,會使用下列從 Salesforce 資料類型對應到服務內部過渡期資料類型的對應。 若要了解複製活動如何將來源結構描述和資料類型對應至接收,請參閱結構描述和資料類型對應

Salesforce 資料類型 服務過渡資料類型
自動編號 String
核取方塊 布林值
貨幣 Decimal
Date Datetime
日期/時間 Datetime
Email String
識別碼 String
查閱關聯性 String
複選挑選清單 String
數字 Decimal
Percent Decimal
手機 String
Picklist String
Text String
文字區域 String
文字區域 (完整) String
文字區域 (豐富) String
文字 (加密) String
URL String

注意

Salesforce 編號型別會對應至 Azure Data Factory中的十進位型別,Azure Synapse管線即服務過渡資料類型。 十進位型別會接受定義的有效位數和小數位數別。 針對小數位數超過所定義小數位數的資料,其值會在預覽資料和複製中四捨五入。 若要避免在 Azure Data Factory 和 Azure Synapse管線中造成這種精確度方面的缺失,請考慮在 Salesforce 的 [自訂欄位定義編輯] 頁面中,將小數位數增加為合適的大值。

查閱活動屬性

若要了解屬性的詳細資料,請參閱查閱活動

升級 Salesforce 連結服務

以下是可協助您升級連結服務和相關查詢的步驟:

  1. 參考必要條件,以在 Salesforce 入口網站中設定連線的應用程式。

  2. 新建 Salesforce 連結服務,並藉由參考連結服務屬性加以設定。 您也需要手動更新依賴舊連結服務的現有資料集,並編輯每個資料集以改用新的連結服務。 自動參考更新資料集的管線活動會使用更新的連結服務參考。

  3. 如果您在參照舊版連結服務的複製活動來源或查閱活動中使用 SQL 查詢,則必須將其轉換為 SOQL 查詢。 從將 Salesforce 作為來源類型Salesforce 物件查詢語言 (SOQL) 深入了解 SOQL 查詢。

  4. readBehavior 會取代為複製活動來源或查閱活動中的 includeDeletedObjects。 如需詳細設定,請參閱 Salesforce 做為來源類型

Salesforce 與 Salesforce 之間的差異 (舊版)

Salesforce 連接器提供新功能,並與 Salesforce (舊版) 連接器的大部分功能相容。 下表顯示 Salesforce 與 Salesforce (舊版) 之間的功能差異。

Salesforce Salesforce (舊版)
支援 Salesforce Bulk API 2.0 內的 SOQL。
針對 SOQL 查詢:
• 不支援 GROUP BY、LIMIT、ORDER BY、OFFSET 或 TYPEOF 子句。
• 不支援 COUNT() 等彙總函式,您可以使用 Salesforce 報表來加以實作。
• 不支援 GROUP BY 子句中的日期函式,但在 WHERE 子句中則可支援。
• 不支援複合位址欄位或複合地理位置欄位。 或者,查詢複合欄位的個別元件。
• 不支援父對子關聯性查詢,而支援子對父關聯性查詢。
同時支援 SQL 和 SOQL 語法。
不支援包含二進位欄位的物件。 支援包含二進位欄位的物件,例如 Attachment 物件。
支援大量 API 中的物件。 如需詳細資訊,請參閱這篇文章 支援大量 API 不支持的物件,例如 CaseStatus。
選取報表識別碼來支援報表。 支援報表查詢語法,例如 {call "<report name>"}

如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區