Kopiera data från och till Salesforce V1 med Azure Data Factory eller Azure Synapse Analytics
GÄLLER FÖR: Azure Data Factory
Azure Synapse Analytics
Dricks
Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!
Den här artikeln beskriver hur du använder kopieringsaktivitet i Azure Data Factory och Azure Synapse-pipelines för att kopiera data från och till Salesforce. Den bygger på översiktsartikeln Kopieringsaktivitet som visar en allmän översikt över kopieringsaktiviteten.
Viktigt!
Salesforce V2-anslutningsappen ger förbättrat inbyggt Salesforce-stöd. Om du använder Salesforce V1-anslutningsappen i din lösning rekommenderar vi att du uppgraderar din Salesforce-anslutningsapp så snart som möjligt. Mer information om skillnaden mellan V2 och V1 finns i det här avsnittet .
Funktioner som stöds
Den här Salesforce-anslutningsappen stöds för följande funktioner:
Funktioner som stöds | IR |
---|---|
aktiviteten Kopiera (källa/mottagare) | (1) (2) |
Sökningsaktivitet | (1) (2) |
(1) Azure Integration Runtime (2) Lokalt installerad integrationskörning
En lista över datalager som stöds som källor eller mottagare finns i tabellen Datalager som stöds.
Mer specifikt stöder den här Salesforce-anslutningsappen:
- Salesforce Developer-, Professional-, Enterprise- eller Unlimited-utgåvor.
- Kopiera data från och till Salesforce-produktion, sandbox-miljö och anpassad domän.
Kommentar
Den här funktionen stöder kopiering av alla scheman från ovan nämnda Salesforce-miljöer, inklusive NPSP (Nonprofit Success Pack ).
Salesforce-anslutningsappen bygger på Salesforce REST/Bulk API. När du kopierar data från Salesforce väljer anslutningsappen automatiskt mellan REST- och Mass-API:er baserat på datastorleken – när resultatuppsättningen är stor används bulk-API:et för bättre prestanda. Du kan uttryckligen ange den API-version som används för att läsa/skriva data via apiVersion
egenskapen i den länkade tjänsten. När du kopierar data till Salesforce använder anslutningsappen BULK API v1.
Kommentar
Anslutningsappen anger inte längre standardversionen för Salesforce API. För bakåtkompatibilitet fortsätter den att fungera om en standard-API-version har angetts tidigare. Standardvärdet är 45,0 för källan och 40,0 för mottagare.
Förutsättningar
API-behörigheten måste vara aktiverad i Salesforce.
Gränser för Salesforce-begäranden
Salesforce har gränser för både totala API-begäranden och samtidiga API-begäranden. Observera följande:
- Om antalet samtidiga begäranden överskrider gränsen sker begränsning och du ser slumpmässiga fel.
- Om det totala antalet begäranden överskrider gränsen blockeras Salesforce-kontot i 24 timmar.
Du kan också få felmeddelandet "REQUEST_LIMIT_EXCEEDED" i båda scenarierna. Mer information finns i avsnittet "API-begärandensgränser" i Salesforce-utvecklargränser.
Kom igång
Om du vill utföra aktiviteten Kopiera med en pipeline kan du använda något av följande verktyg eller SDK:er:
- Verktyget Kopiera data
- Azure-portalen
- The .NET SDK
- The Python SDK
- Azure PowerShell
- REST-API:et
- Azure Resource Manager-mallen
Skapa en länkad tjänst till Salesforce med hjälp av användargränssnittet
Använd följande steg för att skapa en länkad tjänst till Salesforce i Azure Portal användargränssnittet.
Bläddra till fliken Hantera i Din Azure Data Factory- eller Synapse-arbetsyta och välj Länkade tjänster och klicka sedan på Ny:
Sök efter Salesforce och välj Salesforce-anslutningsappen.
Konfigurera tjänstinformationen, testa anslutningen och skapa den nya länkade tjänsten.
Konfigurationsinformation för anslutningsprogram
Följande avsnitt innehåller information om egenskaper som används för att definiera entiteter som är specifika för Salesforce-anslutningsappen.
Länkade tjänstegenskaper
Följande egenskaper stöds för den länkade Salesforce-tjänsten.
Property | Beskrivning | Obligatoriskt |
---|---|---|
type | Typegenskapen måste anges till Salesforce. | Ja |
environmentUrl | Ange URL:en för Salesforce-instansen. – Standardvärdet är "https://login.salesforce.com" . – Om du vill kopiera data från sandbox-miljön anger du "https://test.salesforce.com" . – Om du vill kopiera data från en anpassad domän anger du till exempel "https://[domain].my.salesforce.com" . |
Nej |
användarnamn | Ange ett användarnamn för användarkontot. | Ja |
password | Ange ett lösenord för användarkontot. Markera det här fältet som en SecureString för att lagra det på ett säkert sätt eller referera till en hemlighet som lagras i Azure Key Vault. |
Ja |
securityToken | Ange en säkerhetstoken för användarkontot. Mer information om säkerhetstoken i allmänhet finns i Säkerhet och API:et. Säkerhetstoken kan bara hoppas över om du lägger till Integration Runtimes IP-adress i listan över betrodda IP-adresser i Salesforce. När du använder Azure IR kan du läsa IP-adresser för Azure Integration Runtime. Anvisningar om hur du hämtar och återställer en säkerhetstoken finns i Hämta en säkerhetstoken. Markera det här fältet som en SecureString för att lagra det på ett säkert sätt eller referera till en hemlighet som lagras i Azure Key Vault. |
Nej |
apiVersion | Ange den Salesforce REST/Bulk API-version som ska användas, t.ex. 52.0 . |
Nej |
connectVia | Den integrationskörning som ska användas för att ansluta till datalagret. Om den inte anges använder den standardkörningen för Azure-integrering. | Nej |
Exempel: Lagra autentiseringsuppgifter
{
"name": "SalesforceLinkedService",
"properties": {
"type": "Salesforce",
"typeProperties": {
"username": "<username>",
"password": {
"type": "SecureString",
"value": "<password>"
},
"securityToken": {
"type": "SecureString",
"value": "<security token>"
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Exempel: Lagra autentiseringsuppgifter i Key Vault
{
"name": "SalesforceLinkedService",
"properties": {
"type": "Salesforce",
"typeProperties": {
"username": "<username>",
"password": {
"type": "AzureKeyVaultSecret",
"secretName": "<secret name of password in AKV>",
"store":{
"referenceName": "<Azure Key Vault linked service>",
"type": "LinkedServiceReference"
}
},
"securityToken": {
"type": "AzureKeyVaultSecret",
"secretName": "<secret name of security token in AKV>",
"store":{
"referenceName": "<Azure Key Vault linked service>",
"type": "LinkedServiceReference"
}
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Exempel: Lagra autentiseringsuppgifter i Key Vault, samt miljöUrl och användarnamn
Observera att du inte längre kan använda användargränssnittet för att redigera inställningar genom att göra det. Kryssrutan Ange dynamiskt innehåll i JSON-format markeras och du måste redigera den här konfigurationen helt för hand. Fördelen är att du kan härleda ALLA konfigurationsinställningar från Key Vault i stället för att parametrisera något här.
{
"name": "SalesforceLinkedService",
"properties": {
"type": "Salesforce",
"typeProperties": {
"environmentUrl": {
"type": "AzureKeyVaultSecret",
"secretName": "<secret name of environment URL in AKV>",
"store": {
"referenceName": "<Azure Key Vault linked service>",
"type": "LinkedServiceReference"
},
},
"username": {
"type": "AzureKeyVaultSecret",
"secretName": "<secret name of username in AKV>",
"store": {
"referenceName": "<Azure Key Vault linked service>",
"type": "LinkedServiceReference"
},
},
"password": {
"type": "AzureKeyVaultSecret",
"secretName": "<secret name of password in AKV>",
"store":{
"referenceName": "<Azure Key Vault linked service>",
"type": "LinkedServiceReference"
}
},
"securityToken": {
"type": "AzureKeyVaultSecret",
"secretName": "<secret name of security token in AKV>",
"store":{
"referenceName": "<Azure Key Vault linked service>",
"type": "LinkedServiceReference"
}
}
},
"connectVia": {
"referenceName": "<name of Integration Runtime>",
"type": "IntegrationRuntimeReference"
}
}
}
Egenskaper för datauppsättning
En fullständig lista över avsnitt och egenskaper som är tillgängliga för att definiera datauppsättningar finns i artikeln Datauppsättningar . Det här avsnittet innehåller en lista över egenskaper som stöds av Salesforce-datauppsättningen.
Om du vill kopiera data från och till Salesforce anger du datauppsättningens typegenskap till SalesforceObject. Följande egenskaper stöds.
Property | Beskrivning | Obligatoriskt |
---|---|---|
type | Typegenskapen måste anges till SalesforceObject. | Ja |
objectApiName | Salesforce-objektnamnet som du vill hämta data från. | Nej för källa, Ja för mottagare |
Viktigt!
Den "__c" delen av API-namnet behövs för alla anpassade objekt.
Exempel:
{
"name": "SalesforceDataset",
"properties": {
"type": "SalesforceObject",
"typeProperties": {
"objectApiName": "MyTable__c"
},
"schema": [],
"linkedServiceName": {
"referenceName": "<Salesforce linked service name>",
"type": "LinkedServiceReference"
}
}
}
Kommentar
För bakåtkompatibilitet: När du kopierar data från Salesforce, om du använder den tidigare datauppsättningen av typen "RelationalTable", fortsätter den att fungera medan du ser ett förslag om att växla till den nya typen "SalesforceObject".
Property | Beskrivning | Obligatoriskt |
---|---|---|
type | Datamängdens typegenskap måste anges till RelationalTable. | Ja |
tableName | Namnet på tabellen i Salesforce. | Nej (om "fråga" i aktivitetskällan har angetts) |
Kopiera egenskaper för aktivitet
En fullständig lista över avsnitt och egenskaper som är tillgängliga för att definiera aktiviteter finns i artikeln Pipelines . Det här avsnittet innehåller en lista över egenskaper som stöds av Salesforce-källa och mottagare.
Salesforce som källtyp
Om du vill kopiera data från Salesforce anger du källtypen i kopieringsaktiviteten till SalesforceSource. Följande egenskaper stöds i avsnittet kopieringsaktivitetskälla.
Property | Beskrivning | Obligatoriskt |
---|---|---|
type | Typegenskapen för kopieringsaktivitetskällan måste anges till SalesforceSource. | Ja |
query | Använd den anpassade frågan för att läsa data. Du kan använda FRÅGAN SALESFORCE Object Query Language (SOQL) eller SQL-92. Se fler tips i avsnittet frågetips . Om frågan inte har angetts hämtas alla data för Salesforce-objektet som anges i "objectApiName" i datauppsättningen. | Nej (om "objectApiName" i datamängden har angetts) |
readBehavior | Anger om du vill köra frågor mot befintliga poster eller fråga alla poster, inklusive de borttagna. Om det inte anges är standardbeteendet det tidigare. Tillåtna värden: fråga (standard), queryAll. |
Nej |
Viktigt!
Den "__c" delen av API-namnet behövs för alla anpassade objekt.
Exempel:
"activities":[
{
"name": "CopyFromSalesforce",
"type": "Copy",
"inputs": [
{
"referenceName": "<Salesforce input dataset name>",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "<output dataset name>",
"type": "DatasetReference"
}
],
"typeProperties": {
"source": {
"type": "SalesforceSource",
"query": "SELECT Col_Currency__c, Col_Date__c, Col_Email__c FROM AllDataType__c"
},
"sink": {
"type": "<sink type>"
}
}
}
]
Kommentar
För bakåtkompatibilitet: När du kopierar data från Salesforce fortsätter källan att fungera medan du ser ett förslag på att växla till den nya typen "SalesforceSource" om du använder den tidigare typen "RelationalSource".
Kommentar
Salesforce-källan stöder inte proxyinställningar i den lokalt installerade integrationskörningen, men det gör mottagaren.
Salesforce som mottagartyp
Om du vill kopiera data till Salesforce anger du mottagartypen i kopieringsaktiviteten till SalesforceSink. Följande egenskaper stöds i avsnittet kopieringsaktivitetsmottagare.
Property | Beskrivning | Obligatoriskt |
---|---|---|
type | Typegenskapen för kopieringsaktivitetsmottagaren måste anges till SalesforceSink. | Ja |
writeBehavior | Skrivbeteendet för åtgärden. Tillåtna värden är Insert och Upsert. |
Nej (standard är Infoga) |
externalIdFieldName | Namnet på det externa ID-fältet för upsert-åtgärden. Det angivna fältet måste definieras som "Externt ID-fält" i Salesforce-objektet. Det kan inte ha NULL-värden i motsvarande indata. | Ja för "Upsert" |
writeBatchSize | Radantalet data som skrivits till Salesforce i varje batch. | Nej (standardvärdet är 5 000) |
ignoreNullValues | Anger om null-värden ska ignoreras från indata under en skrivåtgärd. Tillåtna värden är sanna och falska. - Sant: Lämna data i målobjektet oförändrade när du utför en upsert- eller uppdateringsåtgärd. Infoga ett definierat standardvärde när du utför en infogningsåtgärd. - Falskt: Uppdatera data i målobjektet till NULL när du utför en upsert- eller uppdateringsåtgärd. Infoga ett NULL-värde när du utför en infogningsåtgärd. |
Nej (standardvärdet är falskt) |
maxConcurrentConnections | Den övre gränsen för samtidiga anslutningar som upprättats till datalagret under aktivitetskörningen. Ange endast ett värde när du vill begränsa samtidiga anslutningar. | Nej |
Exempel: Salesforce-mottagare i en kopieringsaktivitet
"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": "SalesforceSink",
"writeBehavior": "Upsert",
"externalIdFieldName": "CustomerId__c",
"writeBatchSize": 10000,
"ignoreNullValues": true
}
}
}
]
Frågetips
Hämta data från en Salesforce-rapport
Du kan hämta data från Salesforce-rapporter genom att ange en fråga som {call "<report name>"}
. Ett exempel är "query": "{call \"TestReport\"}"
.
Hämta borttagna poster från Salesforce-papperskorgen
Om du vill köra frågor mot de mjukt borttagna posterna från Salesforce-papperskorgen kan du ange readBehavior
som queryAll
.
Skillnad mellan SOQL- och SQL-frågesyntax
När du kopierar data från Salesforce kan du använda antingen SOQL-fråga eller SQL-fråga. Observera att dessa två har olika stöd för syntax och funktioner, blanda inte den. Du rekommenderas att använda SOQL-frågan, som stöds internt av Salesforce. I följande tabell visas de största skillnaderna:
Syntax | SOQL-läge | SQL-läge |
---|---|---|
Kolumnmarkering | Du måste räkna upp fälten som ska kopieras i frågan, t.ex. SELECT field1, filed2 FROM objectname |
SELECT * stöds utöver kolumnval. |
Anföringstecken | Det går inte att citera fil-/objektnamn. | Fält-/objektnamn kan citeras, t.ex. SELECT "id" FROM "Account" |
Datetime format | Mer information finns här och exempel i nästa avsnitt. | Mer information finns här och exempel i nästa avsnitt. |
Booleska värden | Representerad som False och True , t.ex. SELECT … WHERE IsDeleted=True . |
Representeras som 0 eller 1, t.ex. SELECT … WHERE IsDeleted=1 . |
Kolumnbyte | Stöds ej. | Stöds, t.ex. SELECT a AS b FROM … . |
Relation | Stöds, t.ex. Account_vod__r.nvs_Country__c . |
Stöds ej. |
Hämta data med hjälp av en where-sats i kolumnen DateTime
När du anger SOQL- eller SQL-frågan bör du vara uppmärksam på skillnaden i DateTime-format. Till exempel:
-
SOQL-exempel:
SELECT Id, Name, BillingCity FROM Account WHERE LastModifiedDate >= @{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-ddTHH:mm:ssZ')} AND LastModifiedDate < @{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-ddTHH:mm:ssZ')}
-
SQL-exempel:
SELECT * FROM Account WHERE LastModifiedDate >= {ts'@{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-dd HH:mm:ss')}'} AND LastModifiedDate < {ts'@{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-dd HH:mm:ss')}'}
Fel för MALFORMED_QUERY: Trunkerad
Om du stöter på felet "MALFORMED_QUERY: Trunkerad" beror det normalt på att du har kolumnen JunctionIdList-typ i data och Salesforce har begränsningar för att stödja sådana data med ett stort antal rader. Du kan undvika detta genom att försöka exkludera kolumnen JunctionIdList eller begränsa antalet rader som ska kopieras (du kan partitionera till flera kopieringsaktivitetskörningar).
Datatypsmappning för Salesforce
När du kopierar data från Salesforce används följande mappningar från Salesforce-datatyper till mellanliggande datatyper inom tjänsten internt. Information om hur kopieringsaktiviteten mappar källschemat och datatypen till mottagaren finns i Mappningar av schema- och datatyper.
Salesforce-datatyp | Tjänst interimsdatatyp |
---|---|
Automatiskt nummer | String |
Kryssruta | Booleskt |
Valuta | Decimal |
Date | Datum/tid |
Datum/tid | Datum/tid |
String | |
ID | String |
Uppslagsrelation | String |
Listruta för flera val | String |
Antal | Decimal |
Procent | Decimal |
Telefon | String |
Plocklista | String |
Text | String |
Textområde | String |
Textområde (lång) | String |
Textområde (RTF) | String |
Text (krypterad) | String |
webbadress | String |
Kommentar
Salesforce Number-typen mappas till decimaltyp i Azure Data Factory- och Azure Synapse-pipelines som en tillfällig tjänstdatatyp. Decimaltyp respekterar den definierade precisionen och skalan. För data vars decimaler överskrider den definierade skalan avrundas dess värde i förhandsversionsdata och kopieras. Om du vill undvika sådana precisionsförluster i Azure Data Factory- och Azure Synapse-pipelines kan du överväga att öka decimaltalen till ett ganska stort värde på sidan Redigera anpassad fältdefinition i Salesforce.
Egenskaper för uppslagsaktivitet
Mer information om egenskaperna finns i Sökningsaktivitet.
Nästa steg
En lista över datalager som stöds som källor och mottagare av kopieringsaktiviteten finns i Datalager som stöds.