Kopiera data från och till Salesforce med Azure Data Factory eller Azure Synapse Analytics (äldre)

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!

Tjänsten har släppt en ny Salesforce-anslutningsapp som ger bättre inbyggt Salesforce-stöd. Mer information finns i artikeln Salesforce Connector .

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:

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 Användargränssnittet för Azure-portalen.

  1. 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:

  2. Sök efter Salesforce och välj Salesforce-anslutningsappen.

    Screenshot of the Salesforce connector.

  3. Konfigurera tjänstinformationen, testa anslutningen och skapa den nya länkade tjänsten.

    Screenshot of linked service configuration for Salesforce.

Anslut eller konfigurationsinformation

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.

Screenshot showing Salesforce connection API Name.

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.

Screenshot showing Salesforce connection API Name list.

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)
 maxConcurrent Anslut ions 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.
Citattecken 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
Email 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.