Gegevens uit Salesforce verplaatsen met behulp van Azure Data Factory

Notitie

Dit artikel is van toepassing op versie 1 van Data Factory. Als u de huidige versie van de Data Factory-service gebruikt, raadpleegt u de Salesforce-connector in V2.

In dit artikel wordt beschreven hoe u kopieeractiviteit in een Azure-gegevensfactory kunt gebruiken om gegevens van Salesforce te kopiëren naar een gegevensarchief dat wordt vermeld onder de kolom Sink in de ondersteunde bronnen en sinkstabel . Dit artikel bouwt voort op het artikel over activiteiten voor gegevensverplaatsing , met een algemeen overzicht van gegevensverplaatsing met kopieeractiviteit en ondersteunde combinaties van gegevensarchieven.

Azure Data Factory ondersteunt momenteel alleen het verplaatsen van gegevens van Salesforce naar ondersteunde sinkgegevensarchieven, maar biedt geen ondersteuning voor het verplaatsen van gegevens van andere gegevensarchieven naar Salesforce.

Ondersteunde versies

Deze connector ondersteunt de volgende edities van Salesforce: Developer Edition, Professional Edition, Enterprise Edition of Unlimited Edition. En het ondersteunt kopiëren vanuit Salesforce-productie, sandbox en aangepast domein.

Vereisten

  • API-machtiging moet zijn ingeschakeld.
  • Als u gegevens wilt kopiëren van Salesforce naar on-premises gegevensarchieven, moet u ten minste Gegevensbeheer Gateway 2.0 hebben geïnstalleerd in uw on-premises omgeving.

Limieten voor Salesforce-aanvragen

Salesforce heeft limieten voor zowel het totale aantal API-aanvragen als gelijktijdige API-aanvragen. Houd rekening met de volgende punten:

  • Als het aantal gelijktijdige aanvragen de limiet overschrijdt, treedt beperking op en ziet u willekeurige fouten.
  • Als het totale aantal aanvragen de limiet overschrijdt, wordt het Salesforce-account gedurende 24 uur geblokkeerd.

Mogelijk ontvangt u in beide scenario's ook de fout 'REQUEST_LIMIT_EXCEEDED'. Zie de sectie API-aanvraaglimieten in het artikel Limieten voor Salesforce-ontwikkelaars voor meer informatie.

Aan de slag

U kunt een pijplijn maken met een kopieeractiviteit waarmee gegevens uit Salesforce worden verplaatst met behulp van verschillende hulpprogramma's/API's.

De eenvoudigste manier om een pijplijn te maken, is door de wizard Kopiëren te gebruiken. Zie Zelfstudie: Een pijplijn maken met de wizard Kopiëren voor een beknopt overzicht van het maken van een pijplijn met behulp van de wizard Gegevens kopiëren.

U kunt ook de volgende hulpprogramma's gebruiken om een pijplijn te maken: Visual Studio, Azure PowerShell, Azure Resource Manager-sjabloon, .NET API en REST API. Zie Copy-activiteit zelfstudie voor stapsgewijze instructies voor het maken van een pijplijn met een kopieeractiviteit.

Of u nu de hulpprogramma's of API's gebruikt, u voert de volgende stappen uit om een pijplijn te maken waarmee gegevens uit een brongegevensarchief worden verplaatst naar een sinkgegevensarchief:

  1. Maak gekoppelde services om invoer- en uitvoergegevensarchieven te koppelen aan uw data factory.
  2. Gegevenssets maken om invoer- en uitvoergegevens voor de kopieerbewerking weer te geven.
  3. Maak een pijplijn met een kopieeractiviteit die een gegevensset als invoer en een gegevensset als uitvoer gebruikt.

Wanneer u de wizard gebruikt, worden JSON-definities voor deze Data Factory-entiteiten (gekoppelde services, gegevenssets en de pijplijn) automatisch voor u gemaakt. Wanneer u hulpprogramma's/API's (met uitzondering van .NET API) gebruikt, definieert u deze Data Factory-entiteiten met behulp van de JSON-indeling. Zie het JSON-voorbeeld voor een voorbeeld met JSON-definities voor Data Factory-entiteiten die worden gebruikt voor het kopiëren van gegevens uit Salesforce.

De volgende secties bevatten details over JSON-eigenschappen die worden gebruikt om Data Factory-entiteiten te definiëren die specifiek zijn voor Salesforce:

Eigenschappen van gekoppelde service

De volgende tabel bevat beschrijvingen voor JSON-elementen die specifiek zijn voor de gekoppelde Salesforce-service.

Eigenschap Beschrijving Vereist
type De typeeigenschap moet worden ingesteld op: Salesforce. Yes
environmentUrl Geef de URL van het Salesforce-exemplaar op.

- De standaardwaarde is 'https://login.salesforce.com".
- Als u gegevens uit de sandbox wilt kopiëren, geeft u 'https://test.salesforce.com".
- Als u gegevens uit een aangepast domein wilt kopiëren, geeft u bijvoorbeeld 'https://[domein].my.salesforce.com' op.
Nee
gebruikersnaam Geef een gebruikersnaam op voor het gebruikersaccount. Ja
wachtwoord Geef een wachtwoord op voor het gebruikersaccount. Ja
securityToken Geef een beveiligingstoken op voor het gebruikersaccount. Zie Beveiligingstoken ophalen voor instructies over het opnieuw instellen/ophalen van een beveiligingstoken. Zie Beveiliging en de API voor meer informatie over beveiligingstokens in het algemeen. Yes

Eigenschappen van gegevensset

Zie het artikel Gegevenssets maken voor een volledige lijst met secties en eigenschappen die beschikbaar zijn voor het definiëren van gegevenssets. Secties zoals structuur, beschikbaarheid en beleid van een JSON-gegevensset zijn vergelijkbaar voor alle typen gegevenssets (Azure SQL, Azure Blob, Azure Table enzovoort).

De sectie typeProperties verschilt voor elk type gegevensset en bevat informatie over de locatie van de gegevens in het gegevensarchief. De sectie typeProperties voor een gegevensset van het type RelationalTable heeft de volgende eigenschappen:

Eigenschap Beschrijving Vereist
tableName Naam van de tabel in Salesforce. Nee (als een query van RelationalSource is opgegeven)

Belangrijk

Het gedeelte __c van de API-naam is nodig voor elk aangepast object.

Screenshot shows the Custom Object Definition Detail where you can see the A P I names of the custom objects.

Eigenschappen van de kopieeractiviteit

Zie het artikel Pijplijnen maken voor een volledige lijst met secties en eigenschappen die beschikbaar zijn voor het definiëren van activiteiten. Eigenschappen zoals naam, beschrijving, invoer- en uitvoertabellen en verschillende beleidsregels zijn beschikbaar voor alle soorten activiteiten.

De eigenschappen die beschikbaar zijn in de sectie typeProperties van de activiteit variëren daarentegen met elk activiteitstype. Voor kopieeractiviteit variëren ze, afhankelijk van de typen bronnen en sinks.

Bij kopieeractiviteit zijn de volgende eigenschappen beschikbaar in de sectie type TypeProperties wanneer de bron van het type RelationalSource (inclusief Salesforce) is:

Eigenschap Beschrijving Toegestane waarden Vereist
query Gebruik de aangepaste query om gegevens te lezen. Een SQL-92-query of SOQL-query (Salesforce Object Query Language). Bijvoorbeeld: select * from MyTable__c. Nee (als de tableName van de gegevensset is opgegeven)

Belangrijk

Het gedeelte __c van de API-naam is nodig voor elk aangepast object.

Screenshot shows the Custom Fields & Relationships where you can see the A P I names of the custom objects.

Tips voor query's

Gegevens ophalen met behulp van where-component in de kolom DateTime

Let bij het opgeven van de SOQL- of SQL-query op het verschil in datum/tijd-indeling. Bijvoorbeeld:

  • SOQL-voorbeeld: $$Text.Format('SELECT Id, Name, BillingCity FROM Account WHERE LastModifiedDate >= {0:yyyy-MM-ddTHH:mm:ssZ} AND LastModifiedDate < {1:yyyy-MM-ddTHH:mm:ssZ}', WindowStart, WindowEnd)
  • SQL voorbeeld:
    • De wizard Kopiëren gebruiken om de query op te geven:$$Text.Format('SELECT * FROM Account WHERE LastModifiedDate >= {{ts\'{0:yyyy-MM-dd HH:mm:ss}\'}} AND LastModifiedDate < {{ts\'{1:yyyy-MM-dd HH:mm:ss}\'}}', WindowStart, WindowEnd)
    • JSON-bewerking gebruiken om de query op te geven (escape-teken correct):$$Text.Format('SELECT * FROM Account WHERE LastModifiedDate >= {{ts\\'{0:yyyy-MM-dd HH:mm:ss}\\'}} AND LastModifiedDate < {{ts\\'{1:yyyy-MM-dd HH:mm:ss}\\'}}', WindowStart, WindowEnd)

Gegevens ophalen uit Salesforce-rapport

U kunt gegevens ophalen uit Salesforce-rapporten door een query op te geven als {call "<report name>"}bijvoorbeeld. "query": "{call \"TestReport\"}".

Verwijderde records ophalen uit de Prullenbak van Salesforce

Als u een query wilt uitvoeren op de voorlopig verwijderde records uit de Prullenbak van Salesforce, kunt u 'IsDeleted = 1' opgeven in uw query. Bijvoorbeeld:

  • Als u alleen een query wilt uitvoeren op de verwijderde records, geeft u 'select * from MyTable__c where IsDeleted= 1' op
  • Als u een query wilt uitvoeren op alle records, inclusief de bestaande en verwijderde records, geeft u 'select * from MyTable__c where IsDeleted = 0 or IsDeleted = 1' op

JSON-voorbeeld: Gegevens kopiëren van Salesforce naar Azure Blob

Het volgende voorbeeld bevat JSON-voorbeelddefinities die u kunt gebruiken om een pijplijn te maken met behulp van de Visual Studio of Azure PowerShell. Ze laten zien hoe u gegevens kopieert van Salesforce naar Azure Blob Storage. Gegevens kunnen echter worden gekopieerd naar een van de sinks die hier worden vermeld met behulp van de kopieeractiviteit in Azure Data Factory.

Hier volgen de Data Factory-artefacten die u moet maken om het scenario te implementeren. In de secties die de lijst volgen, vindt u meer informatie over deze stappen.

Gekoppelde Salesforce-service

In dit voorbeeld wordt de gekoppelde Salesforce-service gebruikt. Zie de sectie Gekoppelde Salesforce-service voor de eigenschappen die worden ondersteund door deze gekoppelde service. Zie Beveiligingstoken ophalen voor instructies over het opnieuw instellen/ophalen van het beveiligingstoken.

{
    "name": "SalesforceLinkedService",
    "properties":
    {
        "type": "Salesforce",
        "typeProperties":
        {
            "username": "<user name>",
            "password": "<password>",
            "securityToken": "<security token>"
        }
    }
}

Een gekoppelde Azure Storage-service

{
    "name": "AzureStorageLinkedService",
    "properties": {
        "type": "AzureStorage",
        "typeProperties": {
            "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
        }
    }
}

Salesforce-invoergegevensset

{
    "name": "SalesforceInput",
    "properties": {
        "linkedServiceName": "SalesforceLinkedService",
        "type": "RelationalTable",
        "typeProperties": {
            "tableName": "AllDataType__c"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {
            "externalData": {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

Als u extern instelt op true, wordt de Data Factory-service geïnformeerd dat de gegevensset extern is van de data factory en niet wordt geproduceerd door een activiteit in de data factory.

Belangrijk

Het gedeelte __c van de API-naam is nodig voor elk aangepast object.

Screenshot shows the Custom Object Definition Detail where you can see Singular Label, Plural Label, Object Name, and A P I Name.

De Azure Blob-uitvoergegevensset

Gegevens worden elk uur naar een nieuwe blob geschreven (frequentie: uur, interval: 1).

{
    "name": "AzureBlobOutput",
    "properties":
    {
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties":
        {
            "folderPath": "adfgetstarted/alltypes_c"
        },
        "availability":
        {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Pijplijn met kopieeractiviteit

De pijplijn bevat kopieeractiviteit, die is geconfigureerd voor het gebruik van de invoer- en uitvoergegevenssets en is gepland om elk uur te worden uitgevoerd. In de JSON-definitie van de pijplijn wordt het brontype ingesteld op RelationalSource en wordt het sinktype ingesteld op BlobSink.

Zie eigenschappen van het type RelationalSource voor de lijst met eigenschappen die worden ondersteund door de RelationalSource.

{
    "name":"SamplePipeline",
    "properties":{
        "start":"2016-06-01T18:00:00",
        "end":"2016-06-01T19:00:00",
        "description":"pipeline with copy activity",
        "activities":[
        {
            "name": "SalesforceToAzureBlob",
            "description": "Copy from Salesforce to an Azure blob",
            "type": "Copy",
            "inputs": [
            {
                "name": "SalesforceInput"
            }
            ],
            "outputs": [
            {
                "name": "AzureBlobOutput"
            }
            ],
            "typeProperties": {
                "source": {
                    "type": "RelationalSource",
                    "query": "SELECT Id, Col_AutoNumber__c, Col_Checkbox__c, Col_Currency__c, Col_Date__c, Col_DateTime__c, Col_Email__c, Col_Number__c, Col_Percent__c, Col_Phone__c, Col_Picklist__c, Col_Picklist_MultiSelect__c, Col_Text__c, Col_Text_Area__c, Col_Text_AreaLong__c, Col_Text_AreaRich__c, Col_URL__c, Col_Text_Encrypt__c, Col_Lookup__c FROM AllDataType__c"
                },
                "sink": {
                    "type": "BlobSink"
                }
            },
            "scheduler": {
                "frequency": "Hour",
                "interval": 1
            },
            "policy": {
                "concurrency": 1,
                "executionPriorityOrder": "OldestFirst",
                "retry": 0,
                "timeout": "01:00:00"
            }
        }
        ]
    }
}

Belangrijk

Het gedeelte __c van de API-naam is nodig voor elk aangepast object.

Screenshot shows the Custom Fields & Relationships with the A P I names called out.

Typetoewijzing voor Salesforce

Salesforce-type . Op NET gebaseerd type
Automatisch nummer Tekenreeks
Checkbox Booleaans
Valuta Decimaal
Date DateTime
Datum/tijd DateTime
E-mail Tekenreeks
Id Tekenreeks
Opzoekrelatie Tekenreeks
Selectielijst met meerdere selecties Tekenreeks
Aantal Decimaal
Percentage Decimaal
Telefoon Tekenreeks
Picklist Tekenreeks
Tekst Tekenreeks
Tekstgebied Tekenreeks
Tekstgebied (lang) Tekenreeks
Tekstgebied (rijk) Tekenreeks
Tekst (versleuteld) Tekenreeks
URL Tekenreeks

Notitie

Zie Kolommen voor toewijzingsgegevenssets in Azure Data Factory als u kolommen van de brongegevensset wilt toewijzen aan kolommen uit sinkgegevenssets.

Structuurdefinitie opgeven voor rechthoekige gegevenssets

De structuursectie in de JSON-gegevenssets is een optionele sectie voor rechthoekige tabellen (met rijenkolommen & ) en bevat een verzameling kolommen voor de tabel. U gebruikt de structuursectie voor het opgeven van typegegevens voor typeconversies of het uitvoeren van kolomtoewijzingen. In de volgende secties worden deze functies gedetailleerd beschreven.

Elke kolom bevat de volgende eigenschappen:

Eigenschap Beschrijving Vereist
naam Naam van de kolom. Yes
type Gegevenstype van de kolom. Zie de sectie typeconversies hieronder voor meer informatie over wanneer moet u typegegevens opgeven Nee
Cultuur Op .NET gebaseerde cultuur die moet worden gebruikt wanneer het type is opgegeven en een .NET-type Datetime of Datetimeoffset is. De standaardwaarde is 'en-us'. Nee
indeling De tekenreeks opmaken die moet worden gebruikt wanneer het type is opgegeven en een .NET-type Datetime of Datetimeoffset is. Nee

In het volgende voorbeeld ziet u de structuursectie JSON voor een tabel met drie kolommen userid, name en lastlogindate.

"structure": 
[
    { "name": "userid"},
    { "name": "name"},
    { "name": "lastlogindate"}
],

Gebruik de volgende richtlijnen voor wanneer u 'structuur'-informatie en wat u moet opnemen in de structuursectie .

  • Voor gestructureerde gegevensbronnen waarin gegevensschema's en gegevens worden opgeslagen, samen met de gegevens zelf (bronnen zoals SQL Server, Oracle, Azure-tabel, enzovoort), moet u alleen de sectie Structuur opgeven als u kolomtoewijzing van specifieke bronkolommen wilt uitvoeren op specifieke kolommen in sink en de bijbehorende namen niet hetzelfde zijn (zie de details in de sectie kolomtoewijzing hieronder).

    Zoals hierboven vermeld, is de typegegevens optioneel in de sectie Structuur. Voor gestructureerde bronnen is typegegevens al beschikbaar als onderdeel van de definitie van de gegevensset in het gegevensarchief. U moet dus geen typegegevens opnemen wanneer u de sectie Structuur opneemt.

  • Voor schema voor leesgegevensbronnen (met name Azure Blob) kunt u ervoor kiezen om gegevens op te slaan zonder een schema of typegegevens op te slaan met de gegevens. Voor deze typen gegevensbronnen moet u 'structuur' opnemen in de volgende twee gevallen:

    • U wilt kolomtoewijzing uitvoeren.
    • Wanneer de gegevensset een bron in een Copy-activiteit is, kunt u typegegevens opgeven in 'structuur' en deze gegevensfactory wordt gebruikt voor conversie naar systeemeigen typen voor de sink. Zie Het artikel Gegevens verplaatsen naar en van Azure Blob voor meer informatie.

Ondersteund. Op NET gebaseerde typen

Data factory ondersteunt de volgende CLS-compatibele .NET-typewaarden voor het verstrekken van typeinformatie in 'structuur' voor schema voor leesgegevensbronnen zoals Azure Blob.

  • Int16
  • Int32
  • Int64
  • Enkelvoudig
  • Dubbel
  • Decimaal
  • Byte[]
  • Booleaanse waarde
  • Tekenreeks
  • Guid
  • Datum/tijd
  • Datetimeoffset
  • Periode

Voor Datetime Datetimeoffset & kunt u desgewenst ook de tekenreeks 'culture' & 'format' opgeven om het parseren van uw aangepaste Datum/tijd-tekenreeks te vergemakkelijken. Zie het voorbeeld voor typeconversie hieronder.

Prestaties en afstemmen

Zie de handleiding voor de prestaties en afstemming van kopieeractiviteiten voor meer informatie over belangrijke factoren die van invloed zijn op de prestaties van gegevensverplaatsing (Kopieeractiviteit) op Azure Data Factory en verschillende manieren om deze te optimaliseren.