Memindahkan data dari Salesforce dengan menggunakan Azure Data Factory

Catatan

Artikel ini berlaku untuk versi 1 dari Azure Data Factory. Jika Anda menggunakan versi layanan Azure Data Factory saat ini, lihat Konektor Salesforce di V2.

Artikel ini menguraikan cara menggunakan Aktivitas Penyalinan di pabrik data Azure untuk menyalin data dari Salesforce ke penyimpanan data apa pun yang tercantum di bawah kolom Sink di tabel sumber dan sink yang didukung. Artikel ini dibangun pada artikel aktivitas pergerakan data yang menyajikan gambaran umum pergerakan data dengan Aktivitas Penyalinan dan kombinasi penyimpanan data yang didukung.

Azure Data Factory saat ini hanya mendukung pemindahan data dari Salesforce ke penyimpanan data sink yang didukung, tetapi tidak mendukung pemindahan data dari penyimpanan data lain ke Salesforce.

Versi yang didukung

Konektor ini mendukung edisi Salesforce berikut: Developer Edition, Professional Edition, Enterprise Edition, atau Unlimited Edition. Dan konektor mendukung penyalinan dari produksi Salesforce, kotak pasir, dan domain kustom.

Prasyarat

  • Izin API harus diaktifkan.
  • Untuk menyalin data dari Salesforce ke penyimpanan data lokal, setidaknya Anda harus memasang Gateway Manajemen Data 2.0 di lingkungan lokal Anda.

Batas permintaan Salesforce

Salesforce memiliki batasan untuk permintaan API total dan permintaan API bersamaan. Perhatikan poin berikut:

  • Jika jumlah permintaan bersamaan melebihi batas, pembatasan terjadi dan Anda akan melihat kegagalan acak.
  • Jika jumlah total permintaan melebihi batas, akun Salesforce akan diblokir selama 24 jam.

Anda mungkin juga menerima pesan kesalahan "REQUEST_LIMIT_EXCEEDED" di kedua skenario. Lihat bagian "Batas Permintaan API" di artikel Batas Pengembang Salesforce untuk detailnya.

Memulai

Anda dapat membuat alur dengan aktivitas penyalinan yang memindahkan data dari Salesforce dengan menggunakan alat/API yang berbeda.

Cara termudah untuk membuat alur adalah dengan menggunakan Wizard Penyalinan. Lihat Tutorial: Membuat alur menggunakan Wizard Salin untuk panduan singkat tentang membuat alur menggunakan Wizard Salin data.

Anda juga dapat menggunakan alat berikut untuk membuat pipeline: Visual Studio, Azure PowerShell, template Azure Resource Manager, .NET API, dan REST API. Lihat Tutorial aktivitas penyalinan untuk instruksi langkah demi langkah guna membuat alur dengan aktivitas penyalinan.

Baik Anda menggunakan alat atau API, Anda melakukan langkah-langkah berikut untuk membuat alur yang memindahkan data dari penyimpanan data sumber ke penyimpanan data sink:

  1. Buat layanan tertaut untuk menautkan penyimpanan data input dan output ke data factory Anda.
  2. Buat kumpulan data untuk mewakili data input dan output untuk operasi salin.
  3. Buat jalur dengan aktivitas salinan yang mengambil set data sebagai input dan set data sebagai output.

Saat Anda menggunakan wizard, definisi JSON untuk entitas Data Factory ini (layanan tertaut, himpunan data, dan alur) secara otomatis dibuat untuk Anda. Saat Anda menggunakan alat/API (kecuali .NET API), Anda menentukan entitas Data Factory ini dengan menggunakan format JSON. Untuk sampel dengan definisi JSON untuk entitas Azure Data Factory yang digunakan untuk menyalin data dari Salesforce, lihat bagian contoh JSON: Menyalin data dari Salesforce ke Azure Blob dari artikel ini.

Bagian berikut ini merupakan detail tentang properti JSON yang digunakan untuk menentukan entitas Azure Data Factory khusus Salesforce:

Properti layanan tertaut

Tabel berikut menyediakan deskripsi untuk elemen JSON yang khusus untuk layanan tertaut Salesforce.

Properti Deskripsi Diperlukan
jenis Jenis properti jenis harus diatur ke Salesforce. Ya
environmentUrl Tentukan URL instans Salesforce.

- Defaultnya adalah "https://login.salesforce.com".
- Untuk menyalin data dari kotak pasir, tentukan"https://test.salesforce.com".
- Untuk menyalin data dari domain kustom, tentukan, misalnya, "https://[domain].my.salesforce.com".
Tidak
nama pengguna Tentukan nama pengguna untuk akun pengguna. Ya
kata sandi Tentukan kata sandi untuk akun pengguna. Ya
keamananToken Tentukan token keamanan untuk akun pengguna. Lihat Mendapatkan token keamanan untuk petunjuk tentang cara mengatur ulang/mendapatkan token keamanan. Untuk mempelajari tentang token keamanan secara umum, lihat Keamanan dan API. Ya

Properti himpunan data

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan himpunan data, lihat artikel Membuat himpunan data. Bagian-bagian seperti struktur, ketersediaan, dan kebijakan himpunan data JSON sama untuk semua jenis himpunan data (Azure SQL, Azure blob, tabel Azure, dan lain sebagainya.).

Bagian typeProperties berbeda untuk setiap jenis himpunan data dan menyediakan informasi tentang lokasi data di penyimpanan data. Bagian typeProperties untuk himpunan data dari jenis RelationalTable memiliki properti berikut:

Properti Deskripsi Diperlukan
tableName Nama tabel di Salesforce. Tidak (jika kueriRelationalSource ditentukan)

Penting

Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.

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

Properti aktivitas penyalinan

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan aktivitas, lihat artikel Membuat alur. Properti seperti nama, deskripsi, tabel input dan output, dan berbagai kebijakan tersedia untuk semua jenis aktivitas.

Di sisi lain, properti yang tersedia di bagian aktivitas typeProperties bervariasi menurut setiap jenis aktivitas. Untuk aktivitas Penyalinan, mereka bervariasi bergantung pada jenis sumber dan sink.

Dalam aktivitas penyalinan, ketika sumber adalah jenis RelationalSource (yang mencakup Salesforce), properti berikut tersedia di bagian typeProperties:

Properti Deskripsi Nilai yang diizinkan Diperlukan
kueri Gunakan kueri kustom untuk membaca data. Kueri SQL-92 atau kueri Salesforce Object Query Language (SOQL). Misalnya: select * from MyTable__c. Tidak (jika tableName dari himpunan data ditentukan)

Penting

Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.

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

Tips kueri

Mengambil data menggunakan klausul di kolom TanggalWaktu

Saat Anda menentukan kueri SOQL atau SQL, perhatikan perbedaan format TanggalWaktu. Contohnya:

  • Sampel 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)
  • Sampel SQL:
    • Menggunakan wizard penyalinan untuk menentukan kueri:$$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)
    • Menggunakan pengeditan JSON untuk menentukan kueri (char escape dengan benar):$$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)

Mengambil data dari Laporan Salesforce

Anda dapat mengambil data dari laporan Salesforce dengan menentukan kueri sebagai {call "<report name>"},misalnya,. "query": "{call \"TestReport\"}".

Mengambil rekaman yang dihapus dari Keranjang Sampah Salesforce

Untuk mengkueri rekaman penghapusan sementara dari Keranjang Sampah Salesforce, Anda dapat menentukan "IsDeleted = 1" dalam kueri Anda. Contohnya,

  • Untuk mengkueri hanya rekaman yang dihapus, tentukan "pilih * dari MyTable__c tempat IsDeleted= 1"
  • Untuk mengkueri semua rekaman termasuk yang sudah dihapus, tentukan "pilih * dari MyTable__c tempat IsDeleted = 0 atau IsDeleted = 1"

Contoh JSON: Menyalin data dari sumber Salesforce ke Azure Blob

Contoh berikut menyediakan sampel definisi JSON yang bisa Anda gunakan untuk membuat alur dengan menggunakan Visual Studio atau Azure PowerShell. Mereka menunjukkan cara menyalin data dari Salesforce ke Azure Blob Storage. Namun, data dapat disalin ke salah satu sink yang disebutkan di sini menggunakan Aktivitas Penyalinan di Azure Data Factory.

Berikut adalah artefak Azure Data Factory yang perlu Anda buat untuk mengimplementasikan skenario. Bagian yang mengikuti daftar menyediakan detail tentang langkah-langkah ini.

Layanan tertaut Salesforce

Contoh ini menggunakan layanan Salesforce yang ditautkan. Lihat bagian layanan tertaut Salesforce untuk properti yang didukung oleh layanan tertaut ini. Lihat Dapatkan token keamanan untuk instruksi tentang cara mengatur ulang/mendapatkan token keamanan.

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

Layanan tertaut Azure Storage

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

Himpunan data input 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
            }
        }
    }
}

Pengaturan eksternal ke true menginformasikan layanan Azure Data Factory bahwa himpunan data berada di luar pabrik data dan tidak diproduksi oleh aktivitas di pabrik data.

Penting

Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.

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

Himpunan data output Azure Blob

Data ditulis ke blob baru setiap jam (frekuensi: jam, interval: 1).

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

Alur dengan Aktivitas Penyalinan

Alur berisi Aktivitas Penyalinan yang dikonfigurasi untuk menggunakan himpunan data input dan output dan dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, jenis sumber diatur ke RelationalSource dan jenis sink diatur ke BlobSink.

Lihat Jenis properti RelationalSource untuk daftar properti yang didukung oleh 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"
            }
        }
        ]
    }
}

Penting

Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.

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

Jeni Pemetaan untuk Salesforce

Jenis Salesforce Jenis berbasis .NET
Nomor Otomatis String
Kotak centang Boolean
Mata uang Desimal
Tanggal DateTime
Tanggal/Waktu DateTime
Email String
Id String
Hubungan Pencarian String
Multi-Select Picklist String
Telepon Desimal
Persen Desimal
Nomor String
Daftar pilihan String
Teks String
Area Teks String
Area Teks (Panjang) String
Area Teks (Kaya) String
Teks (Terenkripsi) String
URL String

Catatan

Untuk memetakan kolom dari set data sumber ke kolom dari set data sink, lihat Memetakan kolom set data di Azure Data Factory.

Menentukan definisi struktur untuk himpunan data persegi panjang

Bagian struktur dalam himpunan data JSON adalah bagian opsional untuk tabel persegi panjang (dengan baris & kolom) dan berisi kumpulan kolom untuk tabel. Anda akan menggunakan bagian struktur untuk memberikan informasi jenis untuk konversi jenis atau melakukan pemetaan kolom. Bagian berikut menjelaskan fitur-fitur ini secara rinci.

Setiap kolom berisi properti berikut:

Properti Deskripsi Diperlukan
nama Nama kolom. Ya
jenis Jenis data kolom. Lihat bagian konversi jenis di bawah ini untuk detail lebih lanjut mengenai kapan Anda harus menentukan informasi jenis Tidak
kultur Kultur berbasis .NET yang akan digunakan ketika jenis ditentukan dan berupa jenis .NET Datetime atau Datetimeoffset. Defaultnya adalah "en-us". Tidak
format Format string untuk digunakan ketika jenis ditentukan dan berupa jenis .NET Datetime atau Datetimeoffset. Tidak

Contoh berikut memperlihatkan bagian struktur JSON untuk tabel yang memiliki tiga kolom userid, name, dan lastlogindate.

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

Gunakan panduan berikut ketika akan menyertakan informasi “struktur”, dan hal yang harus disertakan dalam bagian struktur.

  • Untuk sumber data terstruktur yang menyimpan skema data dan informasi jenis bersama dengan data itu sendiri (sumber seperti SQL Server, Oracle, tabel Azure dll.), Anda harus menentukan bagian "struktur" hanya jika ingin melakukan pemetaan kolom dari kolom sumber tertentu ke kolom tertentu dalam sink dan namanya tidak sama (lihat detail di bagian pemetaan kolom di bawah).

    Seperti disebutkan di atas, informasi jenis bersifat opsional di bagian "struktur". Untuk sumber terstruktur, informasi jenis sudah tersedia sebagai bagian dari definisi himpunan data di penyimpanan data, jadi Anda tidak boleh menyertakan informasi jenis saat menyertakan bagian "struktur".

  • Untuk skema pada sumber data yang dibaca (khususnya Azure blob) Anda dapat memilih untuk menyimpan data tanpa menyimpan skema atau mengetik informasi apa pun dengan data tersebut. Untuk jenis sumber data ini, Anda harus menyertakan "struktur" dalam 2 kasus berikut:

    • Anda ingin melakukan pemetaan kolom.
    • Ketika himpunan data adalah sumber dalam aktivitas Salin, Anda dapat memberikan informasi jenis dalam "struktur" dan pabrik data akan menggunakan informasi jenis ini untuk konversi ke jenis asli untuk sink. Lihat artikel Memindahkan data ke dan dari Azure Blob untuk informasi selengkapnya.

Jenis berbasis .NET yang didukung

Pabrik data mendukung nilai jenis berbasis .NET yang mematuhi CLS berikut ini untuk menyediakan informasi jenis dalam "struktur" untuk skema pada sumber data baca seperti blob Azure.

  • Int16
  • Int32
  • Int64
  • Tunggal
  • Double
  • Decimal
  • Byte[]
  • Bool
  • String
  • Guid
  • Datetime
  • Datetimeoffset
  • Rentang waktu

Untuk Tanggalwaktu & Datetimeoffset Anda juga dapat secara opsional menentukan karakter "budaya" & "format" untuk memfasilitasi penguraian karakter tanggalwaktu kustom Anda. Lihat contoh untuk konversi jenis di bawah ini.

Performa dan penyetelan

Lihat Panduan Performa Aktivitas Penyalinan & Penyetelan untuk mempelajari tentang faktor-faktor utama yang memengaruhi performa pergerakan data (Aktivitas Penyalinan) di Azure Data Factory dan berbagai cara untuk mengoptimalkannya.