Kopieren von Daten aus und nach Salesforce V1 mit Azure Data Factory oder Azure Synapse Analytics
GILT FÜR: Azure Data Factory
Azure Synapse Analytics
Tipp
Testen Sie Data Factory in Microsoft Fabric, eine All-in-One-Analyselösung für Unternehmen. Microsoft Fabric deckt alle Aufgaben ab, von der Datenverschiebung bis hin zu Data Science, Echtzeitanalysen, Business Intelligence und Berichterstellung. Erfahren Sie, wie Sie kostenlos eine neue Testversion starten!
In diesem Artikel wird beschrieben, wie Sie die Kopieraktivität in Azure Data Factory- und Azure Synapse-Pipelines verwenden, um Daten aus und in Salesforce zu kopieren. Er baut auf dem Artikel zur Übersicht über die Kopieraktivität auf, der eine allgemeine Übersicht über die Kopieraktivität enthält.
Wichtig
Der neue Salesforce V2-Connector bietet verbesserte native Salesforce-Unterstützung. Wenn Sie den Salesforce V1-Connector in Ihrer Lösung verwenden, sollten Sie möglichst bald ein Upgrade Ihres Salesforce-Connectors durchführen. Ausführliche Informationen zu den Unterschieden zwischen V2 und V1 finden Sie in diesem Abschnitt.
Unterstützte Funktionen
Der Salesforce-Connector wird für die folgenden Funktionen unterstützt:
Unterstützte Funktionen | IR |
---|---|
Kopieraktivität (Quelle/Senke) | ① ② |
Lookup-Aktivität | ① ② |
① Azure Integration Runtime ② Selbstgehostete Integration Runtime
Eine Liste der Datenspeicher, die als Quellen oder Senken unterstützt werden, finden Sie in der Tabelle der unterstützten Datenspeicher.
Dieser Salesforce-Connector unterstützt insbesondere Folgendes:
- Salesforce Developer, Professional, Enterprise oder Unlimited Edition.
- Datenkopiervorgänge aus der und in die Produktionsumgebung, den Sandkasten und die benutzerdefinierte Domäne von Salesforce.
Hinweis
Diese Funktion unterstützt das Kopieren eines beliebigen Schemas aus den oben genannten Salesforce-Umgebungen, einschließlich des Nonprofit Success Pack (NPSP).
Der Salesforce-Connector baut auf der Salesforce REST/Bulk-API auf. Beim Kopieren von Daten aus Salesforce wählt der Connector basierend auf dem Datenumfang automatisch die REST-API oder die Bulk-API aus. Bei einem großen Resultset wird die Bulk-API verwendet, um eine bessere Leistung zu erzielen. Beim Lesen/Schreiben von Daten können Sie die verwendete API-Version über die apiVersion
-Eigenschaft im verknüpften Dienst explizit festlegen. Beim Kopieren von Daten in Salesforce verwendet der Connector MASSEN-API v1.
Hinweis
Der Connector legt die Standardversion für die Salesforce-API nicht mehr fest. Aus Gründen der Abwärtskompatibilität funktioniert er weiterhin, wenn zuvor eine API-Standardversion festgelegt wurde. Der Standardwert ist 45.0 für die Quelle und 40.0 für die Senke.
Voraussetzungen
API-Berechtigungen müssen in Salesforce aktiviert sein.
Anforderungslimits in Salesforce
Salesforce weist Grenzwerte sowohl für die Gesamtanzahl von API-Anforderungen als auch für die Anzahl gleichzeitiger API-Anforderungen auf. Beachten Sie folgende Punkte:
- Wenn die Anzahl von gleichzeitigen Anforderungen das Limit überschreitet, setzt eine Drosselung ein, und es werden zufällig generierte Fehler angezeigt.
- Wenn die Gesamtanzahl von Anforderungen das Limit überschreitet, wird das Salesforce-Konto 24 Stunden lang gesperrt.
In beiden Szenarien erhalten Sie möglicherweise auch die Fehlermeldung „REQUEST_LIMIT_EXCEEDED“. Weitere Informationen finden Sie im Abschnitt „API Request Limits“ (API-Anforderungslimits) im Dokument Salesforce Developer Limits (Salesforce-Entwicklerlimits).
Erste Schritte
Sie können eines der folgenden Tools oder SDKs verwenden, um die Kopieraktivität mit einer Pipeline zu verwenden:
- Das Tool „Daten kopieren“
- Azure-Portal
- Das .NET SDK
- Das Python SDK
- Azure PowerShell
- Die REST-API
- Die Azure Resource Manager-Vorlage
Erstellen eines verknüpften Diensts mit Salesforce über die Benutzeroberfläche
Verwenden Sie die folgenden Schritte, um einen verknüpften Dienst mit Salesforce auf der Azure-Portal Benutzeroberfläche zu erstellen.
Navigieren Sie in Ihrem Azure Data Factory- oder Synapse-Arbeitsbereich zu der Registerkarte „Verwalten“, wählen Sie „Verknüpfte Dienste“ aus und klicken Sie dann auf „Neu“:
Suchen Sie nach Salesforce, und wählen Sie den Salesforce-Connector aus.
Konfigurieren Sie die Dienstdetails, testen Sie die Verbindung, und erstellen Sie den neuen verknüpften Dienst.
Details zur Connector-Konfiguration
Die folgenden Abschnitte enthalten Details zu Eigenschaften, die zum Definieren von Entitäten speziell für den Salesforce-Connector verwendet werden.
Eigenschaften des verknüpften Diensts
Folgende Eigenschaften werden für den mit Salesforce verknüpften Dienst unterstützt:
Eigenschaft | Beschreibung | Erforderlich |
---|---|---|
type | Die type-Eigenschaft muss auf Salesforcefestgelegt sein. | Ja |
environmentUrl | Geben Sie die URL der Salesforce-Instanz an. – Der Standardwert ist "https://login.salesforce.com" . – Um Daten aus einem Sandkasten zu kopieren, geben Sie "https://test.salesforce.com" an. – Geben Sie zum Kopieren von Daten aus einer benutzerdefinierten Domäne z.B. "https://[domain].my.salesforce.com" an. |
Nein |
username | Geben Sie einen Benutzernamen für das Benutzerkonto an. | Ja |
password | Geben Sie ein Kennwort für das Benutzerkonto an. Markieren Sie dieses Feld als einen „SecureString“, um es sicher zu speichern, oder verweisen Sie auf ein in Azure Key Vault gespeichertes Geheimnis. |
Ja |
securityToken | Geben Sie ein Sicherheitstoken für das Benutzerkonto an. Allgemeine Informationen zu Sicherheitstoken finden Sie unter Security and the API(Sicherheit und die API). Das Sicherheits Token kann nur übersprungen werden, wenn Sie die IP-Adresse der Integration Runtime zur Liste vertrauenswürdige IP-Adressen in Salesforce hinzufügen. Weitere Informationen zur Verwendung von Azure Integration Runtime (Azure IR) finden Sie unter IP-Adressen von Azure Integration Runtime. Anleitungen zum Abrufen und Zurücksetzen eines Sicherheitstokens finden Sie unter Get a security token (Abrufen eines Sicherheitstokens). Markieren Sie dieses Feld als einen „SecureString“, um es sicher zu speichern, oder verweisen Sie auf ein in Azure Key Vault gespeichertes Geheimnis. |
Nein |
apiVersion | Geben Sie die zu verwendende Salesforce REST/Bulk-API-Version an, z. B. 52.0 . |
Nein |
connectVia | Die Integration Runtime, die zum Herstellen einer Verbindung mit dem Datenspeicher verwendet werden soll. Wenn keine Option angegeben ist, wird die standardmäßige Azure Integration Runtime verwendet. | Nein |
Beispiel: Speichern von Anmeldeinformationen
{
"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"
}
}
}
Beispiel: Speichern von Anmeldeinformationen in 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"
}
}
}
Beispiel: Speichern von Anmeldeinformationen sowie environmentUrl und username in Key Vault
Beachten Sie, dass Sie dadurch nicht mehr in der Lage sind, Einstellungen über die Benutzeroberfläche zu bearbeiten. Das Kontrollkästchen Dynamische Inhalte im JSON-Format angeben wird aktiviert, und Sie müssen diese Konfiguration vollständig manuell bearbeiten. Der Vorteil ist, dass Sie ALLE Konfigurationseinstellungen aus Key Vault ableiten können, statt an dieser Stelle Parameter hinzuzufügen.
{
"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"
}
}
}
Dataset-Eigenschaften
Eine vollständige Liste mit den Abschnitten und Eigenschaften, die zum Definieren von Datasets zur Verfügung stehen, finden Sie im Artikel zu Datasets. Dieser Abschnitt enthält eine Liste der Eigenschaften, die vom Salesforce-Dataset unterstützt werden.
Legen Sie zum Kopieren von Daten aus und nach Salesforce die type-Eigenschaft des Datasets auf SalesforceObject fest. Die folgenden Eigenschaften werden unterstützt.
Eigenschaft | Beschreibung | Erforderlich |
---|---|---|
type | Die type-Eigenschaft muss auf SalesforceObject festgelegt sein. | Ja |
objectApiName | Der Name des Salesforce-Objekts, aus dem Daten abgerufen werden sollen. | Quelle: Nein, Senke: Ja |
Wichtig
Der Teil „__c“ von API Name wird für benutzerdefinierte Objekte benötigt.
Beispiel:
{
"name": "SalesforceDataset",
"properties": {
"type": "SalesforceObject",
"typeProperties": {
"objectApiName": "MyTable__c"
},
"schema": [],
"linkedServiceName": {
"referenceName": "<Salesforce linked service name>",
"type": "LinkedServiceReference"
}
}
}
Hinweis
Abwärtskompatibilität: Wenn Sie beim Kopieren von Daten aus Salesforce das vorherige Dataset vom Typ „RelationalTable“ verwenden, funktioniert dieses weiterhin. Es wird jedoch eine Empfehlung angezeigt, stattdessen den neuen Typ „SalesforceObject“ zu verwenden.
Eigenschaft | Beschreibung | Erforderlich |
---|---|---|
type | Die type-Eigenschaft des Datasets muss auf RelationalTable festgelegt werden. | Ja |
tableName | Name der Tabelle in Salesforce. | Nein (wenn „query“ in der Aktivitätsquelle angegeben ist) |
Eigenschaften der Kopieraktivität
Eine vollständige Liste mit den Abschnitten und Eigenschaften zum Definieren von Aktivitäten finden Sie im Artikel Pipelines. Dieser Abschnitt enthält eine Liste der Eigenschaften, die von der Salesforce-Quelle und -Senke unterstützt werden.
Salesforce als Quelltyp
Legen Sie zum Kopieren von Daten aus Salesforce den Quelltyp in der Kopieraktivität auf SalesforceSource fest. Die folgenden Eigenschaften werden im Abschnitt source der Kopieraktivität unterstützt.
Eigenschaft | Beschreibung | Erforderlich |
---|---|---|
type | Die type-Eigenschaft der Quelle der Kopieraktivität muss auf SalesforceSource festgelegt werden. | Ja |
Abfrage | Verwendet die benutzerdefinierte Abfrage zum Lesen von Daten. Sie können eine Abfrage vom Typ Salesforce Object Query Language (SOQL) oder eine SQL-92-Abfrage verwenden. Weitere Tipps finden Sie im Abschnitt Tipps zu Abfragen. Wenn die Abfrage nicht angegeben ist, werden alle Daten des Salesforce-Objekts abgerufen, die im Dataset unter „objectApiName“ angegeben sind. | Nein (wenn „objectApiName“ im Dataset angegeben ist) |
readBehavior | Gibt an, ob die vorhandenen Datensätze oder alle Datensätze (einschließlich gelöschter Datensätze) abgefragt werden sollen. Wird diese Option nicht angegeben, wird standardmäßig das erste Verhalten angewendet. Zulässige Werte: query (Standard), queryAll |
Nein |
Wichtig
Der Teil „__c“ von API Name wird für benutzerdefinierte Objekte benötigt.
Beispiel:
"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>"
}
}
}
]
Hinweis
Abwärtskompatibilität: Wenn Sie beim Kopieren von Daten aus Salesforce den vorherigen Typ „RelationalSource“ verwenden, funktioniert die Quelle weiterhin. Es wird jedoch eine Empfehlung angezeigt, stattdessen den neuen Typ „SalesforceSource“ zu verwenden.
Hinweis
Die Salesforce-Quelle unterstützt keine Proxy-Einstellungen in der selbst gehosteten Integration Runtime, aber eine Senke schon.
Salesforce als Senkentyp
Legen Sie zum Kopieren von Daten nach Salesforce den Senkentyp in der Kopieraktivität auf SalesforceSink fest. Die folgenden Eigenschaften werden im Abschnitt sink der Kopieraktivität unterstützt.
Eigenschaft | Beschreibung | Erforderlich |
---|---|---|
type | Die type-Eigenschaft der Senke der Kopieraktivität muss auf SalesforceSink festgelegt werden. | Ja |
writeBehavior | Das Schreibverhalten für den Vorgang. Zulässige Werte: Insert und Upsert. |
Nein (Standardwert ist „Insert“) |
externalIdFieldName | Der Name des externen ID-Felds für den upsert-Vorgang. Das angegebene Feld muss als „Externes ID-Feld“ im Salesforce-Objekt definiert werden. Es kann keine NULL-Werte in den entsprechenden Eingabedaten haben. | Ja für „Upsert“ |
writeBatchSize | Die Zeilenanzahl der Daten, die in jedem Batch in Salesforce geschrieben werden. | Nein (Standardwert ist 5000) |
ignoreNullValues | Gibt an, ob NULL-Werte aus Eingabedaten während eines Schreibvorgangs ignoriert werden sollen. Zulässige Werte sind true und false. - true: Daten im Zielobjekt bleiben unverändert, wenn Sie einen upsert- oder update-Vorgang ausführen. Fügt beim Ausführen eines insert-Vorgangs einen definierten Standardwert ein. - false: Daten im Zielobjekt werden auf NULL aktualisiert, wenn Sie einen upsert- oder update-Vorgang ausführen. Fügt beim Ausführen eines insert-Vorgangs einen NULL-Wert ein. |
Nein (Standardwert ist „false“) |
maxConcurrentConnections | Die Obergrenze gleichzeitiger Verbindungen mit dem Datenspeicher während der Aktivitätsausführung. Geben Sie diesen Wert nur an, wenn Sie die Anzahl der gleichzeitigen Verbindungen begrenzen möchten. | Ohne |
Beispiel: Salesforce-Senke in einer Kopieraktivität
"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
}
}
}
]
Tipps zu Abfragen
Abrufen von Daten aus einem Salesforce-Bericht
Sie können Daten aus Salesforce-Berichten abrufen, indem Sie eine Abfrage als {call "<report name>"}
angeben. z. B. "query": "{call \"TestReport\"}"
.
Abrufen von gelöschten Datensätzen aus dem Salesforce-Papierkorb
Zum Abfragen der vorläufig gelöschten Datensätze aus dem Salesforce-Papierkorb können Sie in der Abfrage readBehavior
als queryAll
angeben.
Unterschied zwischen SOQL- und SQL-Abfragesyntax
Beim Kopieren von Daten aus Salesforce können Sie eine SOQL- oder eine SQL-Abfrage verwenden. Beachten Sie, dass diese beiden Connectors eine unterschiedliche Syntax aufweisen und unterschiedliche Funktionen unterstützen. Mischen Sie sie nicht. Es wird empfohlen, die SOQL-Abfrage zu verwenden, die nativ von Salesforce unterstützt wird. In der folgenden Tabelle werden die Hauptunterschiede aufgeführt:
Syntax | SOQL-Modus | SQL-Modus |
---|---|---|
Spaltenauswahl | Die zu kopierenden Felder müssen in der Abfrage aufgezählt werden, z.B. SELECT field1, filed2 FROM objectname . |
SELECT * wird zusätzlich zur Spaltenauswahl unterstützt. |
Anführungszeichen | Feld-/Objektnamen dürfen nicht in Anführungszeichen eingeschlossen werden. | Feld-/Objektnamen dürfen in Anführungszeichen eingeschlossen werden, z.B. SELECT "id" FROM "Account" . |
Datetime-Format | Details finden Sie hier, Beispiele im nächsten Abschnitt. | Details finden Sie hier, Beispiele im nächsten Abschnitt. |
Boolesche Werte | Dargestellt als False und True , z.B. SELECT … WHERE IsDeleted=True . |
Dargestellt als 0 oder 1, z.B. SELECT … WHERE IsDeleted=1 . |
Umbenennen von Spalten | Wird nicht unterstützt. | Unterstützt, z.B. SELECT a AS b FROM … . |
Beziehung | Unterstützt, z.B. Account_vod__r.nvs_Country__c . |
Wird nicht unterstützt. |
Abrufen von Daten mithilfe einer Where-Klausel für die Spalte „DateTime“
Achten Sie beim Angeben der SOQL- oder SQL-Abfrage auf den Unterschied beim DateTime-Format. Beispiel:
-
SOQL-Beispiel:
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-Beispiel:
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')}'}
Fehler MALFORMED_QUERY: Abgeschnitten
Wenn der Fehler „MALFORMED_QUERY: Truncated“ auftritt, ist dies normalerweise darauf zurückzuführen, dass Sie die Spalte vom Typ JunctionIdList in den Daten verwenden und Salesforce die Unterstützung solcher Daten mit einer großen Anzahl von Zeilen einschränkt. Um dies zu verhindern, versuchen Sie, die Spalte JunctionIdList auszuschließen oder die Anzahl der zu kopierenden Zeilen zu begrenzen (Sie können in mehrere Kopiervorgänge partitionieren).
Datentypzuordnung für Salesforce
Beim Kopieren von Daten aus Salesforce werden die folgenden Zuordnungen von Salesforce-Datentypen zu Zwischendatentypen innerhalb des Diensts verwendet. Weitere Informationen dazu, wie die Kopieraktivität das Quellschema und den Datentyp zur Senke zuordnet, finden Sie unter Schema- und Datentypzuordnungen.
Salesforce-Datentyp | Zwischendatentyp des Diensts |
---|---|
Auto Number | String |
Checkbox | Boolean |
Währung | Decimal |
Date | Datetime |
Date/Time | Datetime |
E‑Mail | String |
id | String |
Lookup Relationship | String |
Multi-Select Picklist | String |
Number | Decimal |
Percent | Decimal |
Phone | String |
Picklist | String |
Text | String |
Text Area | String |
Text Area (Long) | String |
Text Area (Rich) | String |
Text (Encrypted) | String |
URL | String |
Hinweis
Der Salesforce-Typ „Zahl“ entspricht dem Typ „Dezimal“ in den Azure Data Factory- und Azure Synapse-Pipelines als Zwischendatentyp eines Dienstes. Der Typ „Dezimal“ berücksichtigt die definierte Genauigkeit und Skalierung. Für Daten, deren Dezimalstellen die definierte Skalierung überschreiten, wird der Wert in Vorschaudaten und -kopien abgerundet. Um einen solchen Genauigkeitsverlust in Azure Data Factory und Azure Synapse Pipelines zu vermeiden, sollten Sie die Dezimalstellen auf der Seite Benutzerdefinierte Felddefinition bearbeiten von Salesforce auf einen vernünftig großen Wert erhöhen.
Eigenschaften der Lookup-Aktivität
Ausführliche Informationen zu den Eigenschaften finden Sie unter Lookup-Aktivität.
Nächste Schritte
Eine Liste der Datenspeicher, die als Quelles und Senken für die Kopieraktivität unterstützt werden, finden Sie in Unterstützte Datenspeicher.