Przenoszenie danych z usługi Salesforce przy użyciu Azure Data Factory

Uwaga

Ten artykuł dotyczy wersji 1 usługi Data Factory. Jeśli używasz bieżącej wersji usługi Data Factory, zobacz Łącznik usługi Salesforce w wersji 2.

W tym artykule opisano, jak za pomocą działania kopiowania w fabryce danych platformy Azure skopiować dane z usługi Salesforce do dowolnego magazynu danych wymienionego w kolumnie Ujście w obsługiwanych źródłach i tabelach ujścia . Ten artykuł opiera się na artykule dotyczącym działań przenoszenia danych , który przedstawia ogólne omówienie przenoszenia danych za pomocą działania kopiowania i obsługiwanych kombinacji magazynu danych.

Azure Data Factory obecnie obsługuje tylko przenoszenie danych z usługi Salesforce do obsługiwanych magazynów danych ujścia, ale nie obsługuje przenoszenia danych z innych magazynów danych do usługi Salesforce.

Obsługiwane wersje

Ten łącznik obsługuje następujące wersje usługi Salesforce: Developer Edition, Professional Edition, Enterprise Edition lub Unlimited Edition. Obsługuje również kopiowanie z obszaru produkcyjnego, piaskownicy i domeny niestandardowej usługi Salesforce.

Wymagania wstępne

  • Należy włączyć uprawnienie interfejsu API.
  • Aby skopiować dane z usługi Salesforce do lokalnych magazynów danych, musisz mieć co najmniej Zarządzanie danymi bramę 2.0 zainstalowaną w środowisku lokalnym.

Limity żądań usługi Salesforce

Usługa Salesforce ma limity zarówno dla łącznych żądań interfejsu API, jak i współbieżnych żądań interfejsu API. Pamiętaj o następujących kwestiach:

  • Jeśli liczba równoczesnych żądań przekracza limit, występuje ograniczanie przepustowości i zostaną wyświetlone losowe błędy.
  • Jeśli łączna liczba żądań przekroczy limit, konto usługi Salesforce zostanie zablokowane przez 24 godziny.

W obu scenariuszach może zostać również wyświetlony błąd "REQUEST_LIMIT_EXCEEDED". Aby uzyskać szczegółowe informacje, zobacz sekcję "Limity żądań interfejsu API" w artykule Salesforce Developer Limits (Limity żądań interfejsu API).

Wprowadzenie

Potok można utworzyć za pomocą działania kopiowania, które przenosi dane z usługi Salesforce przy użyciu różnych narzędzi/interfejsów API.

Najprostszym sposobem utworzenia potoku jest użycie Kreatora kopiowania. Zobacz Samouczek: tworzenie potoku przy użyciu Kreatora kopiowania , aby uzyskać szybki przewodnik po tworzeniu potoku przy użyciu kreatora kopiowania danych.

Do utworzenia potoku można również użyć następujących narzędzi: Visual Studio, Azure PowerShell, szablon usługi Azure Resource Manager, interfejs API platformy .NET i interfejs API REST. Zobacz samouczek działanie Kopiuj, aby uzyskać instrukcje krok po kroku dotyczące tworzenia potoku za pomocą działania kopiowania.

Niezależnie od tego, czy używasz narzędzi, czy interfejsów API, wykonaj następujące kroki, aby utworzyć potok, który przenosi dane ze źródłowego magazynu danych do magazynu danych ujścia:

  1. Utwórz połączone usługi , aby połączyć magazyny danych wejściowych i wyjściowych z fabryką danych.
  2. Utwórz zestawy danych do reprezentowania danych wejściowych i wyjściowych dla operacji kopiowania.
  3. Utwórz potok z działaniem kopiowania, które przyjmuje zestaw danych jako dane wejściowe i zestaw danych jako dane wyjściowe.

Podczas korzystania z kreatora definicje JSON dla tych jednostek usługi Data Factory (połączone usługi, zestawy danych i potok) są tworzone automatycznie. W przypadku korzystania z narzędzi/interfejsów API (z wyjątkiem interfejsu API platformy .NET) należy zdefiniować te jednostki usługi Data Factory przy użyciu formatu JSON. Przykład z definicjami JSON dla jednostek usługi Data Factory, które są używane do kopiowania danych z usługi Salesforce, zobacz przykład JSON: Kopiowanie danych z usługi Salesforce do sekcji azure Blob w tym artykule.

W poniższych sekcjach przedstawiono szczegółowe informacje o właściwościach JSON używanych do definiowania jednostek usługi Data Factory specyficznych dla usługi Salesforce:

Właściwości połączonej usługi

Poniższa tabela zawiera opisy elementów JSON specyficznych dla połączonej usługi Salesforce.

Właściwość Opis Wymagane
typ Właściwość type musi być ustawiona na: Salesforce. Tak
environmentUrl Określ adres URL wystąpienia usługi Salesforce.

- Wartość domyślna to "https://login.salesforce.com".
- Aby skopiować dane z piaskownicy, określ wartość "https://test.salesforce.com".
— Aby skopiować dane z domeny niestandardowej, określ na przykład "https://[domena].my.salesforce.com".
Nie
nazwa użytkownika Określ nazwę użytkownika dla konta użytkownika. Tak
hasło Określ hasło dla konta użytkownika. Tak
Securitytoken Określ token zabezpieczający dla konta użytkownika. Aby uzyskać instrukcje dotyczące resetowania/pobierania tokenu zabezpieczającego, zobacz Uzyskiwanie tokenu zabezpieczającego . Aby dowiedzieć się więcej o tokenach zabezpieczających, zobacz Zabezpieczenia i interfejs API. Tak

Właściwości zestawu danych

Aby uzyskać pełną listę sekcji i właściwości dostępnych do definiowania zestawów danych, zobacz artykuł Tworzenie zestawów danych . Sekcje, takie jak struktura, dostępność i zasady kodu JSON zestawu danych, są podobne dla wszystkich typów zestawów danych (Azure SQL, obiektów blob platformy Azure, tabeli platformy Azure itd.).

Sekcja typeProperties jest inna dla każdego typu zestawu danych i zawiera informacje o lokalizacji danych w magazynie danych. Sekcja typeProperties dla zestawu danych typu RelationalTable ma następujące właściwości:

Właściwość Opis Wymagane
tableName Nazwa tabeli w usłudze Salesforce. Nie (jeśli określono zapytanierelacyjne źródło )

Ważne

Część "__c" nazwy interfejsu API jest wymagana dla dowolnego obiektu niestandardowego.

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

Właściwości działania kopiowania

Aby uzyskać pełną listę sekcji i właściwości dostępnych do definiowania działań, zobacz artykuł Tworzenie potoków . Właściwości takie jak nazwa, opis, tabele wejściowe i wyjściowe oraz różne zasady są dostępne dla wszystkich typów działań.

Właściwości, które są dostępne w sekcji typeProperties działania, z drugiej strony, różnią się w zależności od każdego typu działania. W przypadku działania kopiowania różnią się w zależności od typów źródeł i ujściów.

W działaniu kopiowania, gdy źródło jest typu RelationalSource (w tym Salesforce), następujące właściwości są dostępne w sekcji typeProperties:

Właściwość Opis Dozwolone wartości Wymagane
query Użyj zapytania niestandardowego do odczytywania danych. Zapytanie SQL-92 lub zapytanie Języka zapytań SOQL (Salesforce Object Query Language). Na przykład: select * from MyTable__c. Nie (jeśli określono parametr tableNamezestawu danych )

Ważne

Część "__c" nazwy interfejsu API jest wymagana dla dowolnego obiektu niestandardowego.

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

Porady dotyczące zapytań

Pobieranie danych przy użyciu klauzuli where w kolumnie DateTime

Podczas określania zapytania SOQL lub SQL zwróć uwagę na różnicę w formacie DateTime. Na przykład:

  • Przykład SOQL: $$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)
  • przykład SQL:
    • Za pomocą kreatora kopiowania określ zapytanie:$$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)
    • Za pomocą edycji JSON określ zapytanie (znak ucieczki prawidłowo):$$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)

Pobieranie danych z raportu usługi Salesforce

Dane można pobrać z raportów usługi Salesforce, określając zapytanie jako {call "<report name>"}, na przykład. "query": "{call \"TestReport\"}".

Pobieranie usuniętych rekordów z Kosza usługi Salesforce

Aby wykonać zapytanie o nietrwałe usunięte rekordy z Kosza usługi Salesforce, możesz określić wartość "IsDeleted = 1" w zapytaniu. Na przykład

  • Aby wysłać zapytanie tylko do usuniętych rekordów, określ wartość "select * from MyTable__c where IsDeleted= 1"
  • Aby wysłać zapytanie o wszystkie rekordy, w tym istniejące i usunięte, określ wartość "select * from MyTable__c where IsDeleted = 0 lub IsDeleted = 1"

Przykład JSON: kopiowanie danych z usługi Salesforce do usługi Azure Blob

Poniższy przykład zawiera przykładowe definicje JSON, których można użyć do utworzenia potoku przy użyciu Visual Studio lub Azure PowerShell. Pokazują one, jak skopiować dane z usługi Salesforce do Azure Blob Storage. Jednak dane można skopiować do dowolnego z ujść określonych tutaj przy użyciu działania kopiowania w Azure Data Factory.

Poniżej przedstawiono artefakty usługi Data Factory, które należy utworzyć w celu zaimplementowania scenariusza. Sekcje, które są zgodne z listą, zawierają szczegółowe informacje o tych krokach.

Połączona usługa Salesforce

W tym przykładzie użyto połączonej usługi Salesforce . Zobacz sekcję Połączona usługa Salesforce , aby uzyskać właściwości obsługiwane przez tę połączoną usługę. Aby uzyskać instrukcje dotyczące resetowania/pobierania tokenu zabezpieczającego, zobacz Uzyskiwanie tokenu zabezpieczającego .

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

Połączona usługa azure Storage

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

Zestaw danych wejściowych usługi Salesforce

{
    "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
            }
        }
    }
}

Ustawienie zewnętrzne na wartość true informuje usługę Data Factory, że zestaw danych jest zewnętrzny dla fabryki danych i nie jest generowany przez działanie w fabryce danych.

Ważne

Część "__c" nazwy interfejsu API jest wymagana dla dowolnego obiektu niestandardowego.

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

Wyjściowy zestaw danych obiektów blob platformy Azure

Dane są zapisywane w nowym obiekcie blob co godzinę (częstotliwość: godzina, interwał: 1).

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

Potok z działaniem kopiowania

Potok zawiera działanie kopiowania, które jest skonfigurowane do używania wejściowych i wyjściowych zestawów danych i jest zaplanowane do uruchamiania co godzinę. W definicji JSON potoku typ źródła jest ustawiony na RelationalSource, a typ ujścia jest ustawiony na BlobSink.

Aby uzyskać listę właściwości obsługiwanych przez element RelationalSource, zobacz Właściwości typu RelalSource .

{
    "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"
            }
        }
        ]
    }
}

Ważne

Część "__c" nazwy interfejsu API jest wymagana dla dowolnego obiektu niestandardowego.

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

Mapowanie typów dla usługi Salesforce

Typ usługi Salesforce . Typ oparty na platformie NET
Automatyczny numer Ciąg
Pole wyboru Wartość logiczna
Waluta Liczba dziesiętna
Data DateTime
Data/godzina DateTime
E-mail Ciąg
Id Ciąg
Relacja odnośnika Ciąg
Lista wyboru wielokrotnego wyboru Ciąg
Liczba Liczba dziesiętna
Procent Liczba dziesiętna
Telefon Ciąg
Lista wyboru Ciąg
Tekst Ciąg
Obszar tekstu Ciąg
Obszar tekstu (długi) Ciąg
Obszar tekstu (sformatowany) Ciąg
Tekst (zaszyfrowany) Ciąg
Adres URL Ciąg

Uwaga

Aby mapować kolumny ze źródłowego zestawu danych na kolumny z zestawu danych ujścia, zobacz Mapowanie kolumn zestawu danych w Azure Data Factory.

Określanie definicji struktury dla prostokątnych zestawów danych

Sekcja struktury w formacie JSON zestawów danych jest opcjonalną sekcją dla tabel prostokątnych (z kolumnami wierszy & ) i zawiera kolekcję kolumn dla tabeli. Sekcja struktury służy do dostarczania informacji o typie konwersji typów lub mapowania kolumn. W poniższych sekcjach szczegółowo opisano te funkcje.

Każda kolumna zawiera następujące właściwości:

Właściwość Opis Wymagane
name Nazwa kolumny. Tak
typ Typ danych kolumny. Zobacz sekcję konwersji typów poniżej, aby uzyskać więcej informacji na temat tego, kiedy należy określić informacje o typie Nie
kultura Kultura oparta na platformie .NET, która ma być używana, gdy typ jest określony i jest typem platformy .NET Datetime lub Datetimeoffset. Wartość domyślna to "en-us". Nie
format Ciąg formatu używany podczas określania typu i jest typem platformy .NET Datetime lub Datetimeoffset. Nie

Poniższy przykład przedstawia sekcję struktury JSON dla tabeli zawierającej trzy kolumny userid, name i lastlogindate.

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

Skorzystaj z poniższych wskazówek, aby uwzględnić informacje o strukturze i informacje, które należy uwzględnić w sekcji struktury .

  • W przypadku ustrukturyzowanych źródeł danych, które przechowują schemat danych i informacje o typie wraz z samymi danymi (źródła takie jak SQL Server, Oracle, tabela platformy Azure itp.), należy określić sekcję "struktura" tylko wtedy, gdy chcesz mapować kolumny określonego źródła na określone kolumny ujścia, a ich nazwy nie są takie same (zobacz szczegóły w sekcji mapowania kolumn poniżej).

    Jak wspomniano powyżej, informacje o typie są opcjonalne w sekcji "struktura". W przypadku źródeł ustrukturyzowanych informacje o typie są już dostępne w ramach definicji zestawu danych w magazynie danych, dlatego nie należy uwzględniać informacji o typie w przypadku uwzględnienia sekcji "struktura".

  • W przypadku schematu w źródłach danych odczytu (w szczególności obiektów blob platformy Azure) można przechowywać dane bez przechowywania żadnych informacji o schemacie lub typie danych. W przypadku tych typów źródeł danych należy uwzględnić "strukturę" w następujących 2 przypadkach:

    • Chcesz wykonać mapowanie kolumn.
    • Gdy zestaw danych jest źródłem w działanie Kopiuj, możesz podać informacje o typie w "strukturze", a fabryka danych będzie używać tych informacji typu do konwersji na typy natywne dla ujścia. Aby uzyskać więcej informacji, zobacz Przenoszenie danych do i z usługi Azure Blob .

Obsługiwane. Typy oparte na platformie NET

Usługa Data Factory obsługuje następujące wartości typów opartych na środowisku CLS na platformie .NET, aby dostarczać informacje o typie w strukturze schematu w źródłach danych odczytu, takich jak obiekt blob platformy Azure.

  • Int16
  • Int32
  • Int64
  • Pojedynczy
  • Double
  • Liczba dziesiętna
  • Bajt[]
  • Wartość logiczna
  • Ciąg
  • Guid (identyfikator GUID)
  • Datetime (data/godzina)
  • Datetimeoffset
  • Zakres czasu

W polu Datetime & Datetimeoffset możesz również opcjonalnie określić ciąg "culture" "format" & , aby ułatwić analizowanie niestandardowego ciągu daty/godziny. Zobacz przykładową konwersję typów poniżej.

Wydajności i dostosowywanie

Zapoznaj się z przewodnikiem dotyczącym wydajności i dostrajania działania kopiowania, aby dowiedzieć się więcej o kluczowych czynnikach wpływających na wydajność przenoszenia danych (działanie kopiowania) w Azure Data Factory i różne sposoby ich optymalizacji.