Copiare dati da e in Salesforce usando Azure Data Factory o Azure Synapse Analytics
SI APPLICA A: Azure Data Factory Azure Synapse Analytics
Suggerimento
Provare Data Factory in Microsoft Fabric, una soluzione di analisi completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .
Questo articolo illustra come usare l'attività di copia in Azure Data Factory e nelle pipeline di Azure Synapse per copiare dati da e in Salesforce. Si basa sull'articolo di panoramica dell'attività di copia che presenta informazioni generali sull'attività di copia.
Importante
Il nuovo connettore Salesforce offre un supporto di Salesforce nativo migliorato. Se si usa il connettore Salesforce legacy nella soluzione, supportato così come è solo per la compatibilità con le versioni precedenti, vedere l'articolo Connettore Salesforce (legacy).
Funzionalità supportate
Questo connettore Salesforce è supportato per le funzionalità seguenti:
Funzionalità supportate | IR |
---|---|
Attività di copia (origine/sink) | (1) (2) |
Attività Lookup | (1) (2) |
(1) Runtime di integrazione di Azure (2) Runtime di integrazione self-hosted
Per un elenco di archivi dati supportati come origini o sink, vedere la tabella Archivi dati supportati.
In particolare, il connettore Salesforce supporta:
- Le edizioni Developer, Professional, Enterprise o Unlimited di Salesforce.
- Copia di dati da e in un dominio personalizzato (il dominio personalizzato può essere configurato sia in ambienti di produzione che in ambienti sandbox).
È possibile impostare in modo esplicito la versione dell'API usata per leggere/scrivere dati tramite apiVersion
la proprietà nel servizio collegato. Quando si copiano dati in Salesforce, il connettore usa l'API BULK 2.0.
Prerequisiti
In Salesforce deve essere abilitata l'autorizzazione API.
È necessario configurare le app Connessione ed nel portale di Salesforce che fanno riferimento a questo documento ufficiale o alle linee guida dettagliate riportate nella raccomandazione in questo articolo.
Importante
- L'utente di esecuzione deve disporre dell'autorizzazione Solo API.
- L'ora di scadenza del token di accesso può essere modificata tramite i criteri di sessione anziché il token di aggiornamento.
Limiti dell'API Bulk di Salesforce 2.0
Per eseguire query e inserire dati viene usata l'API Bulk 2.0 di Salesforce. Nell'API bulk 2.0 i batch vengono creati automaticamente. È possibile inviare fino a 15.000 batch per periodo di 24 ore in sequenza. Se i batch superano il limite, verranno visualizzati errori.
Nell'API bulk 2.0, solo i processi di inserimento usano batch. I processi di query non lo fanno. Per informazioni dettagliate, vedere How Requests Are Processed in the Bulk API 2.0 Developer Guide (Come vengono elaborate le richieste) nella Guida per sviluppatori dell'API bulk 2.0.
Per altre informazioni, vedere la sezione "Limiti generali" in Limiti per gli sviluppatori di Salesforce.
Operazioni preliminari
Per eseguire l'attività di copia con una pipeline, è possibile usare uno degli strumenti o SDK seguenti:
- Strumento Copia dati
- Il portale di Azure
- .NET SDK
- The Python SDK
- Azure PowerShell
- The REST API
- Modello di Azure Resource Manager
Creare un servizio collegato a Salesforce usando l'interfaccia utente
Usare la procedura seguente per creare un servizio collegato a Salesforce nell'interfaccia utente di portale di Azure.
Passare alla scheda Gestisci nell'area di lavoro di Azure Data Factory o Synapse e selezionare Servizi collegati, quindi fare clic su Nuovo:
Cercare Salesforce e selezionare il connettore Salesforce.
Configurare i dettagli del servizio, testare la connessione e creare il nuovo servizio collegato.
Dettagli di configurazione di Connessione or
Le sezioni seguenti forniscono informazioni dettagliate sulle proprietà usate per definire entità specifiche del connettore Salesforce.
Proprietà del servizio collegato
Per il servizio collegato di Salesforce sono supportate le proprietà seguenti.
Proprietà | Descrizione | Richiesto |
---|---|---|
type | La proprietà type deve essere impostata su SalesforceV2. | Sì |
environmentUrl | Specificare l'URL dell'istanza di Salesforce. Ad esempio, specificare per copiare "https://<domainName>.my.salesforce.com" dati dal dominio personalizzato. Informazioni su come configurare o visualizzare il dominio personalizzato che fa riferimento a questo articolo. |
Sì |
authenticationType | Tipo di autenticazione usato per connettersi a Salesforce. Il valore consentito è OAuth2ClientCredentials. |
Sì |
clientId | Specificare l'ID client dell'app salesforce OAuth 2.0 Connessione ed. Per altre informazioni, vedere questo articolo | Sì |
clientSecret | Specificare il segreto client dell'app OAuth 2.0 di Salesforce 2.0 Connessione ed. Per altre informazioni, vedere questo articolo | Sì |
apiVersion | Specificare la versione 2.0 dell'API Bulk salesforce da usare, ad esempio 52.0 . L'API bulk 2.0 supporta solo la versione >API = 47.0. Per informazioni sull'API bulk 2.0, vedere l'articolo. Se si usa una versione dell'API precedente, si verifica un errore. |
Sì |
connectVia | Runtime di integrazione da usare per la connessione all'archivio dati. Se non specificato, viene usato il runtime di integrazione di Azure predefinito. | No |
Esempio: Archiviare le credenziali
{
"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"
}
}
}
Esempio: Archiviare le credenziali in 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"
}
}
}
Esempio: Archiviare le credenziali in Key Vault, nonché environmentUrl e clientId
Si noti che, in questo modo, non sarà più possibile usare l'interfaccia utente per modificare le impostazioni. La casella di controllo Specifica contenuto dinamico in formato JSON verrà selezionata e sarà necessario modificare completamente questa configurazione a mano. Il vantaggio è che è possibile derivare tutte le impostazioni di configurazione da Key Vault invece di parametrizzare qualsiasi elemento qui.
{
"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"
}
}
}
Proprietà del set di dati
Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione dei set di dati, vedere l'articolo Set di dati. Questa sezione presenta un elenco delle proprietà supportate dal set di dati Salesforce.
Per copiare dati da e in Salesforce, impostare la proprietà type del set di dati su SalesforceV2Object. Sono supportate le proprietà seguenti.
Proprietà | Descrizione | Richiesto |
---|---|---|
type | La proprietà type deve essere impostata su SalesforceV2Object. | Sì |
objectApiName | Nome dell'oggetto di Salesforce da cui recuperare i dati. | No per l'origine (se è specificato "SOQLQuery" nell'origine), Sì per il sink |
reportId | ID del report Salesforce da cui recuperare i dati. Non è supportato nel sink. Si noti che esistono limitazioni quando si usano i report. | No per l'origine (se è specificato "SOQLQuery" nell'origine), non supporta il sink |
Importante
La parte "__c" delnome dell'API è necessaria per qualsiasi oggetto personalizzato.
Esempio:
{
"name": "SalesforceDataset",
"properties": {
"type": "SalesforceV2Object",
"typeProperties": {
"objectApiName": "MyTable__c"
},
"schema": [],
"linkedServiceName": {
"referenceName": "<Salesforce linked service name>",
"type": "LinkedServiceReference"
}
}
}
Proprietà dell'attività di copia
Per un elenco completo delle sezioni e delle proprietà disponibili per la definizione delle attività, vedere l'articolo sulle pipeline. Questa sezione presenta un elenco delle proprietà supportate dall'origine e dal sink Salesforce.
Salesforce come tipo di origine
Per copiare dati da Salesforce, impostare il tipo di origine nell'attività di copia su SalesforceV2Source. Nella sezione source dell'attività di copia sono supportate le proprietà seguenti.
Proprietà | Descrizione | Richiesto |
---|---|---|
type | La proprietà type dell'origine dell'attività di copia deve essere impostata su SalesforceV2Source. | Sì |
SOQLQuery | Usare la query personalizzata per leggere i dati. È possibile usare solo query SOQL (Salesforce Object Query Language) con limitazioni. Per le limitazioni SOQL, vedere questo articolo. Se la query non viene specificata, verranno recuperati tutti i dati dell'oggetto Salesforce specificato in "ObjectApiName/reportId" nel set di dati. | No (se è specificato "ObjectApiName/reportId" nel set di dati) |
includeDeletedObjects | Indica se eseguire query sui record esistenti o su tutti i record inclusi quelli eliminati. Se non specificato, il comportamento predefinito è false. Valori consentiti: false (impostazione predefinita), true. |
No |
Importante
La parte "__c" delnome dell'API è necessaria per qualsiasi oggetto personalizzato.
Esempio:
"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 come tipo di sink
Per copiare i dati in Salesforce, impostare il tipo di sink nell'attività di copia su SalesforceV2Sink. Nella sezione sink dell'attività di copia sono supportate le proprietà seguenti.
Proprietà | Descrizione | Richiesto |
---|---|---|
type | La proprietà type del sink dell'attività di copia deve essere impostata su SalesforceV2Sink. | Sì |
writeBehavior | Comportamento dell'azione di scrittura per l'operazione. I valori consentiti sono: Insert e Upsert. |
No (il valore predefinito è Insert) |
externalIdFieldName | Nome del campo ID esterno per l'operazione upsert. Il campo specificato deve essere definito come "Campo ID esterno" nell'oggetto Salesforce. Non può includere valori NULL nei dati di input corrispondenti. | Sì per "Upsert" |
writeBatchSize | Conteggio delle righe di dati scritti da Salesforce in ogni batch. Suggerisci impostare questo valore da 10.000 a 200.000. Le righe troppo piccole in ogni batch ridurranno le prestazioni di copia. Un numero eccessivo di righe in ogni batch può causare un timeout dell'API. | No (il valore predefinito è 100.000) |
ignoreNullValues | Indica se ignorare i valori NULL dai dati di input durante un'operazione di scrittura. I valori consentiti sono true e false. - True: i dati nell'oggetto di destinazione rimangono invariati quando si esegue un'operazione di upsert o aggiornamento. Inserire un valore predefinito definito quando si esegue un'operazione di inserimento. - False: i dati nell'oggetto di destinazione vengono aggiornati a NULL quando si esegue un'operazione di upsert o aggiornamento. Inserire un valore NULL quando si esegue un'operazione di inserimento. |
No (il valore predefinito è false) |
maxConcurrent Connessione ions | Limite massimo di connessioni simultanee stabilite all'archivio dati durante l'esecuzione dell'attività. Specificare un valore solo quando si desidera limitare le connessioni simultanee. | No |
Esempio: Sink Salesforce in un'attività di copia
"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
}
}
}
]
Mapping dei tipi di dati per Salesforce
Quando si copiano dati da Salesforce, i mapping seguenti vengono usati dai tipi di dati Salesforce ai tipi di dati provvisori all'interno del servizio internamente. Per informazioni su come l'attività di copia esegue il mapping dello schema di origine e del tipo di dati al sink, vedere Mapping dello schema e del tipo di dati.
Tipo di dati di Salesforce | Tipo di dati provvisori del servizio |
---|---|
Numerazione automatica | String |
Casella di controllo | Booleano |
Valuta | Decimale |
Data | Data/Ora |
Data/ora | Data/Ora |
Indirizzo e-mail | String |
ID | String |
Relazione di ricerca | String |
Elenco a discesa seleziona multipla | String |
Numero | Decimali |
Percentuale | Decimale |
Telefono | String |
Picklist | String |
Testo | String |
Area testo. | String |
Area di testo (Long) | String |
Area di testo (Rich) | String |
Testo (Crittografato) | String |
URL | String |
Nota
Il tipo di numero Salesforce esegue il mapping al tipo Decimal in Azure Data Factory e nelle pipeline di Azure Synapse come tipo di dati provvisorio del servizio. Il tipo decimale rispetta la precisione e la scala definite. Per i dati le cui posizioni decimali superano la scala definita, il relativo valore verrà arrotondato nei dati di anteprima e nella copia. Per evitare di ottenere tali perdite di precisione nelle pipeline di Azure Data Factory e Azure Synapse, è consigliabile aumentare le posizioni decimali a un valore ragionevolmente elevato nella pagina Modifica definizione campo personalizzato di Salesforce.
Proprietà dell'attività Lookup
Per altre informazioni sulle proprietà, vedere Attività Lookup.
Aggiornare il servizio collegato Salesforce
Ecco i passaggi che consentono di aggiornare il servizio collegato e le query correlate:
Configurare le app connesse nel portale di Salesforce facendo riferimento ai prerequisiti.
Creare un nuovo servizio collegato Salesforce e configurarlo facendo riferimento alle proprietà del servizio collegato.
Se si usa una query SQL nell'origine dell'attività di copia o nell'attività di ricerca che fa riferimento al servizio collegato legacy, è necessario convertirli nella query SOQL. Altre informazioni sulla query SOQL da Salesforce come tipo di origine e su Salesforce Object Query Language (SOQL).
readBehavior viene sostituito con includeDeletedObjects nell'origine dell'attività di copia o nell'attività di ricerca. Per la configurazione dettagliata, vedere Salesforce come tipo di origine.
Differenze tra Salesforce e Salesforce (legacy)
Il connettore Salesforce offre nuove funzionalità ed è compatibile con la maggior parte delle funzionalità del connettore Salesforce (legacy). La tabella seguente illustra le differenze di funzionalità tra Salesforce e Salesforce (legacy).
Salesforce | Salesforce (legacy) |
---|---|
Supportare SOQL all'interno dell'API Bulk di Salesforce 2.0. Per le query SOQL: • Le clausole GROUP BY, LIMIT, ORDER BY, OFF edizione Standard T o TYPEOF non sono supportate. • Le funzioni di aggregazione come COUNT() non sono supportate, è possibile usare i report di Salesforce per implementarli. • Le funzioni di data nelle clausole GROUP BY non sono supportate, ma sono supportate nella clausola WHERE. • I campi di indirizzi composti o i campi di georilevazione composta non sono supportati. In alternativa, eseguire una query sui singoli componenti dei campi composti. • Le query di relazione padre-figlio non sono supportate, mentre sono supportate query di relazione da figlio a padre. |
Supportare sia la sintassi SQL che la sintassi SOQL. |
Gli oggetti che contengono campi binari non sono supportati. | Gli oggetti che contengono campi binari sono supportati, ad esempio l'oggetto Attachment. |
Supporto di oggetti all'interno dell'API bulk. Per altre informazioni, vedi questo articolo. | Supportare gli oggetti non supportati dall'API Bulk, ad esempio CaseStatus. |
Report di supporto selezionando un ID report. | Supportare la sintassi delle query del report, ad esempio {call "<report name>"} . |
Contenuto correlato
Per un elenco degli archivi dati supportati come origini e sink dall'attività di copia, vedere Archivi dati supportati.