Salin data ke dan dari Data Lake Storage Gen1 dengan menggunakan 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 Azure Data Lake Storage Gen1 di V2.

Artikel ini menjelaskan cara menggunakan Salin Aktivitas di Azure Data Factory untuk memindahkan data ke dan dari Azure Data Lake Storage Gen1 (sebelumnya dikenal sebagai Azure Data Lake Store). Ini dibuat pada artikel Aktivitas pergerakan data, ikhtisar pergerakan data dengan Salin Aktivitas.

Skenario yang didukung

Anda bisa menyalin data dari Azure Data Lake Store ke penyimpanan data berikut ini:

Kategori Penyimpanan data
Azure Azure Blob Storage
Azure Data Lake Storage Gen1
Azure Cosmos DB (SQL API)
Azure SQL Database
Azure Synapse Analytics
Indeks Azure Cognitive Search
Penyimpanan Tabel Azure
Database SQL Server
Oracle
File Sistem file

Anda bisa menyalin data dari penyimpanan data berikut ke Azure Data Lake Store:

Kategori Penyimpanan data
Azure Azure Blob Storage
Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1
Azure SQL Database
Azure Synapse Analytics
Penyimpanan Tabel Azure
Database Amazon Redshift
DB2
MySQL
Oracle
PostgreSQL
SAP Business Warehouse
SAP HANA
SQL Server
Sybase
Teradata
NoSQL Cassandra
MongoDB
File Amazon S3
Sistem file
FTP
HDFS
SFTP
Lainnya HTTP Generik
OData Generik
ODBC Generik
Salesforce
Tabel web (tabel dari HTML)

Catatan

Buat akun Azure Data Lake Storage sebelum membuat alur dengan Salin Aktivitas. Untuk informasi selengkapnya, lihat Mulai menggunakan Azure Data Lake Store.

Jenis autentikasi yang didukung

Konektor Data Lake Store mendukung jenis autentikasi ini:

  • Autentikasi utama layanan
  • Autentikasi kredensial pengguna (OAuth)

Kami menyarankan agar Anda menggunakan autentikasi utama layanan, terutama untuk salinan data terjadwal. Perilaku kedaluwarsa token dapat terjadi dengan autentikasi kredensial pengguna. Untuk detail konfigurasi, lihat bagian Properti layanan tertaut.

Mulai

Anda dapat membuat alur dengan aktivitas salin yang memindahkan data ke/dari Azure Data Lake Storage dengan menggunakan alat/API yang berbeda.

Cara termudah untuk membuat alur untuk menyalin data adalah dengan menggunakan Wizard Salin. Untuk tutorial tentang membuat alur dengan menggunakan Wizard Salin, lihat Tutorial: Membuat alur menggunakan Wizard Salin.

Anda juga dapat menggunakan alat berikut untuk membuat alur: 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 data factory. Data factory mungkin berisi satu atau beberapa alur.
  2. Buat layanan tertaut untuk menautkan penyimpanan data input dan output ke data factory Anda. Misalnya, jika Anda menyalin data dari penyimpanan Azure blob storage ke Azure Data Lake Storage, Anda membuat dua layanan tertaut untuk menautkan akun Microsoft Azure Storage dan Azure Data Lake Storage ke data factory Anda. Untuk properti layanan tertaut yang khusus untuk Azure Data Lake Store, lihat bagian properti layanan tertaut.
  3. Buat himpunan data untuk merepresentasikan data input dan output untuk operasi salin. Dalam contoh yang disebutkan di langkah terakhir, Anda membuat himpunan data untuk menentukan kontainer dan folder blob yang berisi input data. Dan, Anda membuat himpunan data lain untuk menentukan folder dan alur file di penyimpanan Data Lake yang menyimpan data yang disalin dari penyimpanan blob. Untuk properti himpunan data yang khusus untuk Azure Data Lake Store, lihat bagian properti himpunan data.
  4. Buat alur dengan aktivitas salin yang mengambil himpunan data sebagai input dan himpunan data sebagai output. Dalam contoh yang disebutkan sebelumnya, Anda menggunakan BlobSource sebagai sumber dan AzureDataLakeStoreSink sebagai sink untuk aktivitas salinan. Demikian pula, jika Anda menyalin dari Azure Data Lake Store ke Azure Blob Storage, Anda menggunakan AzureDataLakeStoreSource dan BlobSink dalam aktivitas salinan. Untuk properti aktivitas salin yang khusus untuk Azure Data Lake Store, lihat bagian menyalin properti aktivitas. Untuk detail tentang cara menggunakan penyimpanan data sebagai sumber atau sink, klik tautan di bagian sebelumnya untuk penyimpanan data Anda.

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 contoh dengan definisi JSON untuk entitas Data Factory yang digunakan untuk menyalin data ke/dari Azure Data Lake Storage, lihat bagian Contoh JSON dari artikel ini.

Bagian berikut memberikan detail tentang properti JSON yang digunakan untuk menentukan entitas Pabrik Data khusus untuk Data Lake Storage.

Properti layanan tertaut

Layanan tertaut menghubungkan penyimpanan data ke data factory. Anda membuat layanan tertaut jenis AzureDataLakeStore untuk menautkan Data Lake Store Anda ke data factory Anda. Tabel berikut ini menjelaskan elemen JSON khusus untuk layanan tertaut Data Lake Store. Anda dapat memilih antara prinsipal layanan dan autentikasi kredensial pengguna.

Properti Deskripsi Diperlukan
jenis Properti jenis harus diatur ke AzureDataLakeStore. Ya
dataLakeStoreUri Informasi tentang akun Azure Data Lake Storage. Informasi ini menggunakan salah satu format berikut: https://[accountname].azuredatalakestore.net/webhdfs/v1 atau adl://[accountname].azuredatalakestore.net/. Ya
subscriptionId ID langganan Azure tempat akun Data Lake Storage berada. Diperlukan untuk sink
resourceGroupName Nama grup sumber daya Azure tempat akun Data Lake Storage berada. Diperlukan untuk sink

Untuk menggunakan autentikasi perwakilan layanan, daftarkan entitas aplikasi di Azure Active Directory (Azure AD) dan berikan akses ke Data Lake Store. Untuk langkah-langkah mendetail, lihat Autentikasi layanan ke layanan. Catat nilai berikut, yang Anda gunakan untuk menentukan layanan tertaut:

  • ID aplikasi
  • Kunci aplikasi
  • ID Penyewa

Penting

Pastikan Anda memberikan izin yang tepat kepada perwakilan di Azure Data Lake Store:

  • Untuk menggunakan Azure Data Lake Storage sebagai sumber, berikan setidaknya izin Baca + Eksekusi akses data untuk mencantumkan dan menyalin konten folder, atau Izin Baca untuk menyalin satu file. Tidak ada persyaratan tentang kontrol akses tingkat akun.
  • Untuk menggunakan Data Lake Store sebagai sink, berikan setidaknya izin akses data Write + Execute untuk membuat item anak di folder. Dan jika Anda menggunakan Azure IR untuk mengaktifkan salinan (sumber dan sink ada di cloud), agar Data Factory dapat mendeteksi wilayah Data Lake Store, berikan setidaknya peran Pembaca dalam kontrol akses akun (IAM). Jika Anda ingin menghindari peran IAM ini, tentukan executionLocation dengan lokasi Data Lake Store Anda dalam aktivitas salin.
  • Jika Anda menggunakan Wizard Salin untuk menulis alur, berikan setidaknya peran Pembaca dalam kontrol akses akun (IAM). Selain itu, berikan setidaknya izin Baca + Eksekusi ke akar Data Lake Store Anda ("/") dan anak-anaknya. Jika tidak, Anda mungkin melihat pesan "Kredensial yang disediakan tidak valid."

Gunakan autentikasi utama layanan dengan menentukan properti berikut:

Properti Deskripsi Diperlukan
servicePrincipalId Tentukan ID klien aplikasi. Ya
servicePrincipalKey Tentukan kunci aplikasi. Ya
penyewa Tentukan informasi penyewa (nama domain atau ID penyewa) tempat aplikasi Anda berada. Anda dapat mengambilnya dengan mengarahkan mouse ke sudut kanan atas portal Microsoft Azure. Ya

Contoh: Autentikasi perwakilan layanan

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "https://<accountname>.azuredatalakestore.net/webhdfs/v1",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": "<service principal key>",
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
            "subscriptionId": "<subscription of ADLS>",
            "resourceGroupName": "<resource group of ADLS>"
        }
    }
}

Autentikasi kredensial pengguna

Atau, Anda dapat menggunakan autentikasi kredensial pengguna untuk menyalin dari atau ke Data Lake Store dengan menentukan properti berikut:

Properti Deskripsi Diperlukan
otorisasi Klik tombol Otorisasi di Editor Data Factory dan masukkan kredensial Anda yang menetapkan URL otorisasi yang dihasilkan secara otomatis ke properti ini. Ya
sessionId ID sesi OAuth dari sesi otorisasi OAuth. Setiap ID sesi unik dan hanya dapat digunakan sekali. Pengaturan ini dihasilkan secara otomatis saat Anda menggunakan Editor Data Factory. Ya

Penting

Pastikan Anda memberikan izin yang tepat kepada pengguna di Azure Data Lake Store:

  • Untuk menggunakan Azure Data Lake Storage sebagai sumber, berikan setidaknya izin Baca + Eksekusi akses data untuk mencantumkan dan menyalin konten folder, atau Izin Baca untuk menyalin satu file. Tidak ada persyaratan tentang kontrol akses tingkat akun.
  • Untuk menggunakan Data Lake Store sebagai sink, berikan setidaknya izin akses data Write + Execute untuk membuat item anak di folder. Dan jika Anda menggunakan Azure IR untuk mengaktifkan salinan (sumber dan sink ada di cloud), agar Data Factory dapat mendeteksi wilayah Data Lake Store, berikan setidaknya peran Pembaca dalam kontrol akses akun (IAM). Jika Anda ingin menghindari peran IAM ini, tentukan executionLocation dengan lokasi Data Lake Store Anda dalam aktivitas salin.
  • Jika Anda menggunakan Wizard Salin untuk menulis alur, berikan setidaknya peran Pembaca dalam kontrol akses akun (IAM). Selain itu, berikan setidaknya izin Baca + Eksekusi ke akar Data Lake Store Anda ("/") dan anak-anaknya. Jika tidak, Anda mungkin melihat pesan "Kredensial yang disediakan tidak valid."

Contoh: Autentikasi kredensial pengguna

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "https://<accountname>.azuredatalakestore.net/webhdfs/v1",
            "sessionId": "<session ID>",
            "authorization": "<authorization URL>",
            "subscriptionId": "<subscription of ADLS>",
            "resourceGroupName": "<resource group of ADLS>"
        }
    }
}

Kedaluwarsa token

Kode otorisasi yang Anda hasilkan dengan menggunakan tombol Otorisasi kedaluwarsa setelah beberapa waktu. Pesan berikut ini berarti bahwa token autentikasi telah kedaluwarsa:

Kesalahan operasi kredensial: invalid_grant - AADSTS70002: Kesalahan memvalidasi kredensial. AADSTS70008: Hibah akses yang disediakan kedaluwarsa atau dicabut. ID Jejak: d18629e8-af88-43c5-88e3-d8419eb1fca1 ID Korelasi: fac30a0c-6be6-4e02-8d69-a776d2ffefd7 Stempel waktu: 2015-12-15 21-09-31Z.

Tabel berikut ini memperlihatkan waktu kedaluwarsa dari berbagai jenis akun pengguna:

Tipe pengguna Kedaluwarsa setelah
Akun pengguna tidak dikelola oleh Azure Active Directory (misalnya, @hotmail.com atau @live.com) 12 jam
Akun pengguna yang dikelola oleh Azure Active Directory 14 hari setelah irisan terakhir berjalan

90 hari, jika irisan berdasarkan layanan tertaut berbasis OAuth berjalan setidaknya sekali setiap 14 hari

Jika Anda mengubah kata sandi sebelum waktu kedaluwarsa token, token akan segera kedaluwarsa. Anda akan melihat pesan yang disebutkan sebelumnya di bagian ini.

Anda dapat mengotorisasi ulang akun dengan menggunakan tombol Otorisasi saat token kedaluwarsa untuk menebus layanan yang ditautkan. Anda juga dapat menghasilkan nilai untuk properti sessionId dan otorisasi secara terprogram dengan menggunakan kode berikut:

if (linkedService.Properties.TypeProperties is AzureDataLakeStoreLinkedService ||
    linkedService.Properties.TypeProperties is AzureDataLakeAnalyticsLinkedService)
{
    AuthorizationSessionGetResponse authorizationSession = this.Client.OAuth.Get(this.ResourceGroupName, this.DataFactoryName, linkedService.Properties.Type);

    WindowsFormsWebAuthenticationDialog authenticationDialog = new WindowsFormsWebAuthenticationDialog(null);
    string authorization = authenticationDialog.AuthenticateAAD(authorizationSession.AuthorizationSession.Endpoint, new Uri("urn:ietf:wg:oauth:2.0:oob"));

    AzureDataLakeStoreLinkedService azureDataLakeStoreProperties = linkedService.Properties.TypeProperties as AzureDataLakeStoreLinkedService;
    if (azureDataLakeStoreProperties != null)
    {
        azureDataLakeStoreProperties.SessionId = authorizationSession.AuthorizationSession.SessionId;
        azureDataLakeStoreProperties.Authorization = authorization;
    }

    AzureDataLakeAnalyticsLinkedService azureDataLakeAnalyticsProperties = linkedService.Properties.TypeProperties as AzureDataLakeAnalyticsLinkedService;
    if (azureDataLakeAnalyticsProperties != null)
    {
        azureDataLakeAnalyticsProperties.SessionId = authorizationSession.AuthorizationSession.SessionId;
        azureDataLakeAnalyticsProperties.Authorization = authorization;
    }
}

Untuk detail tentang kelas Data Factory yang digunakan dalam kode, lihat topik AzureDataLakeStoreLinkedService Class, AzureDataLakeAnalyticsLinkedService Class, dan AuthorizationSessionGetResponse Class. Tambahkan referensi ke versi 2.9.10826.1824 dari Microsoft.IdentityModel.Clients.ActiveDirectory.WindowsForms.dll untuk kelas WindowsFormsWebAuthenticationDialog yang digunakan dalam kode.

Tips Pemecahan Masalah

Gejala: Saat menyalin data ke Azure Data Lake Store, jika aktivitas salin Anda gagal dengan kesalahan berikut:

Failed to detect the region for Azure Data Lake account {your account name}. Please make sure that the Resource Group name: {resource group name} and subscription ID: {subscription ID} of this Azure Data Lake Store resource are correct.

Akar penyebab: Ada 2 kemungkinan alasan:

  1. resourceGroupName dan/atau subscriptionId yang ditentukan dalam layanan tertaut Azure Data Lake Store salah;
  2. Pengguna atau perwakilan tidak memiliki izin yang diperlukan.

Resolusi:

  1. Pastikan subscriptionId dan resourceGroupName yang Anda tentukan di layanan tertaut typeProperties memang milik akun data lake Anda.

  2. Berikan, setidaknya, peran Pembaca kepada pengguna atau perwakilan layanan di akun data lake.

    Untuk langkah yang lebih detail, lihat Menetapkan peran Azure menggunakan portal Microsoft Azure.

  3. Jika Anda tidak ingin memberikan peran Pembaca kepada pengguna atau perwakilan layanan, alternatifnya adalah menentukan lokasi eksekusi secara eksplisit dalam aktivitas salinan dengan lokasi Data Lake Store Anda. Contoh:

    {
      "name": "CopyToADLS",
      "type": "Copy",
      ......
      "typeProperties": {
        "source": {
          "type": "<source type>"
        },
        "sink": {
          "type": "AzureDataLakeStoreSink"
        },
        "exeuctionLocation": "West US"
      }
    }
    

Properti himpunan data

Untuk menentukan himpunan data untuk mewakili data input di Azure Data Lake Storage, Anda mengatur properti jenis himpunan data ke AzureDataLakeStore. Atur properti linkedServiceName dari himpunan data ke nama layanan tertaut Data Lake Store. Untuk daftar lengkap bagian & properti JSON yang tersedia untuk menentukan himpunan data, lihat artikel Membuat himpunan data. Bagian dari himpunan data di JSON, seperti struktur, ketersediaan, dan kebijakan, mirip untuk semua jenis himpunan data (database Azure SQL,blob Azure, dan tabel Azure, misalnya). Bagian typeProperties berbeda untuk setiap jenis himpunan data dan memberikan informasi seperti lokasi dan format data di penyimpanan data.

Bagian typeProperties untuk himpunan datajenis AzureDataLakeStore berisi properti berikut ini:

Properti Deskripsi Diperlukan
folderPath Jalur ke kontainer dan folder di Azure Data Lake Storage. Ya
fileName Nama file di Azure Data Lake Storage. Properti fileName bersifat opsional dan peka huruf besar/kecil.

Jika Anda menentukan fileName, aktivitas (termasuk Salin) berfungsi pada file tertentu.

Ketika fileName tidak ditentukan, Salin menyertakan semua file di folderPath dalam himpunan data input.

Ketika fileName tidak ditentukan untuk himpunan data output dan preserveHierarchy tidak ditentukan dalam sink aktivitas, nama file yang dihasilkan dalam format Data._Guid_.txt. Misalnya: Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt.
Tidak
partitionedBy Properti partitionedBy bersifat opsional. Anda dapat menggunakannya untuk menentukan alur dinamis dan nama file untuk data seri waktu. Misalnya, folderPath dapat di parameter untuk setiap jam data. Untuk detail dan contoh, lihat properti partitionedBy. Tidak
format Jenis format berikut didukung: TextFormat, JsonFormat, AvroFormat, OrcFormat, dan ParquetFormat. Atur properti jenis berdasarkan format ke salah satu nilai ini. Untuk informasi selengkapnya, lihat bagian Format teks, format JSON, format Avro,format ORC, dan Format Parquet di File dan format kompresi yang didukung oleh artikel Azure Data Factory.

Jika Anda ingin menyalin file "apa adanya" di antara penyimpanan berbasis file (salinan biner), lewati format bagian dalam definisi himpunan data input dan output.
Tidak
kompresi Menentukan jenis dan tingkat kompresi untuk data. Jenis yang didukung adalah: GZip, Deflate, BZip2, dan ZipDeflate. Level yang didukung adalah: Optimal dan Tercepat. Untuk informasi selengkapnya, lihat File dan format kompresi yang didukung oleh Azure Data Factory. Tidak

Properti partitionedBy

Anda dapat menentukan properti folderPath dan fileName dinamis untuk data deret waktu dengan properti partitionedBy, fungsi Data Factory, dan variabel sistem. Untuk detailnya, lihat artikel Azure Data Factory - fungsi dan variabel sistem.

Dalam contoh berikut{Slice}, diganti dengan nilai variabel sistem Data Factory SliceStart dalam format yang ditentukan (yyyyMMddHH). Nama SliceStart mengacu pada waktu mulai irisan. Properti folderPath ini berbeda untuk setiap irisan, seperti dalam wikidatagateway/wikisampledataout/2014100103 atau wikidatagateway/wikisampledataout/2014100104.

"folderPath": "wikidatagateway/wikisampledataout/{Slice}",
"partitionedBy":
[
    { "name": "Slice", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyyMMddHH" } },
],

Dalam contoh berikut, tahun, bulan, hari, dan waktu SliceStart diekstraksi ke dalam variabel terpisah yang digunakan oleh folderPath dan fileName properti:

"folderPath": "wikidatagateway/wikisampledataout/{Year}/{Month}/{Day}",
"fileName": "{Hour}.csv",
"partitionedBy":
[
    { "name": "Year", "value": { "type": "DateTime", "date": "SliceStart", "format": "yyyy" } },
    { "name": "Month", "value": { "type": "DateTime", "date": "SliceStart", "format": "MM" } },
    { "name": "Day", "value": { "type": "DateTime", "date": "SliceStart", "format": "dd" } },
    { "name": "Hour", "value": { "type": "DateTime", "date": "SliceStart", "format": "hh" } }
],

Untuk detail selengkapnya tentang himpunan data, penjadwalan, dan irisan seri waktu, lihat artikel penjadwalan dan eksekusi Himpunan data di Azure Data Factory dan Azure Data Factory.

Properti aktivitas salin

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

Properti yang tersedia di bagian typeProperties dari aktivitas akan berbeda-beda untuk setiap jenis aktivitas. Untuk aktivitas salin, ini bervariasi sesuai dengan jenis sumber dan sink.

AzureDataLakeStoreSource mendukung bagian properti typeProperties berikut:

Properti Deskripsi Nilai yang diizinkan Diperlukan
berulang Menunjukkan apakah data dibaca secara berulang dari subfolder atau hanya dari folder yang ditentukan. Benar (nilai default), Salah Tidak

AzureDataLakeStoreSink mendukung bagian properti typeProperties berikut:

Properti Deskripsi Nilai yang diizinkan Diperlukan
copyBehavior Menentukan perilaku salin. PreserveHierarchy: mempertahankan hierarki file di folder target. Alur relatif file sumber ke folder sumber identik dengan alur relatif file target ke folder target.

FlattenHierarchy: Semua file dari folder sumber berada di tingkat pertama folder target. File target dibuat dengan nama yang dihasilkan secara otomatis.

MergeFiles: menggabungkan semua file dari folder sumber ke satu file. Jika nama file atau blob ditentukan, nama file yang digabungkan adalah nama yang ditentukan. Jika tidak, nama file akan dihasilkan secara otomatis.
Tidak

contoh berulang dan copyBehavior

Bagian ini menjelaskan perilaku yang dihasilkan dari operasi Salin untuk kombinasi yang berbeda dari nilai berulang dan copyBehavior.

rekursif copyBehavior Perilaku yang dihasilkan
TRUE preserveHierarchy Untuk folder sumber Folder1 dengan struktur berikut:

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5

folder target Folder1 dibuat dengan struktur yang sama dengan sumber

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5.
TRUE flattenHierarchy Untuk folder sumber Folder1 dengan struktur berikut:

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5

Folder target Folder1 dibuat dengan struktur berikut:

Folder1
    nama yang dihasilkan secara otomatis untuk File1
    nama yang dibuat secara otomatis untuk File2
    nama yang dibuat secara otomatis untuk File3
    nama yang dibuat secara otomatis untuk File4
    nama yang dibuat secara otomatis untuk File5
TRUE mergeFiles Untuk folder sumber Folder1 dengan struktur berikut:

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5

Folder target Folder1 dibuat dengan struktur berikut:

Folder1
    Konten File1 + File2 + File3 + File4 + File 5 digabungkan menjadi satu file dengan nama file yang dibuat secara otomatis
salah preserveHierarchy Untuk folder sumber Folder1 dengan struktur berikut:

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5

Folder target Folder1 dibuat dengan struktur berikut

Folder1
    File1
    File2


Subfolder1 dengan File3, File4, dan File5 tidak diambil.
false flattenHierarchy Untuk folder sumber Folder1 dengan struktur berikut:

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5

Folder target Folder1 dibuat dengan struktur berikut

Folder1
    nama yang dihasilkan secara otomatis untuk File1
    nama yang dibuat secara otomatis untuk File2


Subfolder1 dengan File3, File4, dan File5 tidak diambil.
false mergeFiles Untuk folder sumber Folder1 dengan struktur berikut:

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5

Folder target Folder1 dibuat dengan struktur berikut

Folder1
    konten File1 + File2 digabungkan ke dalam satu file, dengan nama file yang dihasilkan secara otomatis. nama yang dihasilkan secara otomatis untuk File1

Subfolder1 dengan File3, File4, dan File5 tidak diambil.

File yang didukung dan format kompresi

Untuk detail selengkapnya, lihat artikel File dan format kompresi di Azure Data Factory.

Contoh JSON untuk menyalin data ke dan dari Azure Data Lake Store

Contoh berikut menyediakan contoh definisi JSON. Anda bisa menggunakan contoh definisi ini untuk membuat alur dengan menggunakan Visual Studio atau Azure PowerShell. Contoh menunjukkan cara menyalin data ke dan dari Penyimpanan Data Lake Store dan Azure Blob Storage. Namun, data dapat disalin langsung dari salah satu sumber ke salah satu sink yang didukung. Untuk informasi selengkapnya, lihat bagian "Penyimpanan dan format data yang didukung" di Memindahkan data dengan menggunakan Salin Aktivitas.

Contoh: Menyalin data dari Azure Blob Storage ke Azure Data Lake Store

Contoh kode di bagian ini menunjukkan:

Contoh menunjukkan bagaimana data seri waktu dari Azure Blob Storage disalin ke Data Lake Store setiap jam.

Layanan tertaut Microsoft Azure Storage

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

Layanan tertaut Microsoft Azure Data Lake Store

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "https://<accountname>.azuredatalakestore.net/webhdfs/v1",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": "<service principal key>",
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
            "subscriptionId": "<subscription of ADLS>",
            "resourceGroupName": "<resource group of ADLS>"
        }
    }
}

Catatan

Untuk detail konfigurasi, lihat bagian Properti layanan tertaut.

himpunan data input Azure Blob

Dalam contoh berikut, data diambil dari blob baru setiap jam ("frequency": "Hour", "interval": 1). Jalur folder dan nama file untuk blob dievaluasi secara dinamis berdasarkan waktu mulai yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, dan bagian hari waktu mulai. Nama file menggunakan bagian jam dari waktu mulai. Pengaturan "external": true menginformasikan layanan Azure Data Factory bahwa himpunan data berada di luar Data Factory dan tidak diproduksi oleh aktivitas di Data Factory.

{
  "name": "AzureBlobInput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}",
      "partitionedBy": [
        {
          "name": "Year",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "yyyy"
          }
        },
        {
          "name": "Month",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "MM"
          }
        },
        {
          "name": "Day",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "dd"
          }
        },
        {
          "name": "Hour",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "HH"
          }
        }
      ]
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

himpunan data output Azure Data Lake Store

Contoh berikut menyalin data ke Data Lake Store. Data baru disalin ke Data Lake Store setiap jam.

{
    "name": "AzureDataLakeStoreOutput",
    "properties": {
        "type": "AzureDataLakeStore",
        "linkedServiceName": "AzureDataLakeStoreLinkedService",
        "typeProperties": {
            "folderPath": "datalake/output/"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        }
    }
}

Aktivitas salin dalam alur dengan sumber blob dan sink Data Lake Store

Dalam contoh berikut, alur berisi aktivitas salin yang dikonfigurasi untuk menggunakan himpunan data input dan output. Aktivitas salin dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, source jenis diatur ke BlobSource, dan sink jenis diatur ke AzureDataLakeStoreSink.

{
    "name":"SamplePipeline",
    "properties":
    {
        "start":"2014-06-01T18:00:00",
        "end":"2014-06-01T19:00:00",
        "description":"pipeline with copy activity",
        "activities":
        [
            {
                "name": "AzureBlobtoDataLake",
                "description": "Copy Activity",
                "type": "Copy",
                "inputs": [
                    {
                        "name": "AzureBlobInput"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureDataLakeStoreOutput"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "AzureDataLakeStoreSink"
                    }
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "policy": {
                    "concurrency": 1,
                    "executionPriorityOrder": "OldestFirst",
                    "retry": 0,
                    "timeout": "01:00:00"
                }
            }
        ]
    }
}

Contoh: Menyalin data dari Azure Data Lake Store ke Azure blob

Contoh kode di bagian ini menunjukkan:

Kode menyalin data seri waktu dari Data Lake Store ke Azure blob setiap jam.

Layanan tertaut Microsoft Azure Data Lake Store

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "https://<accountname>.azuredatalakestore.net/webhdfs/v1",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": "<service principal key>",
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>"
        }
    }
}

Catatan

Untuk detail konfigurasi, lihat bagian Properti layanan tertaut.

Layanan tertaut Microsoft Azure Storage

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

himpunan data input Azure Data Lake

Dalam contoh ini, mengatur "external" ​​ke true menginformasikan layanan Azure Data Factory bahwa tabel berada di luar data factory dan tidak dihasilkan oleh aktivitas di data factory.

{
    "name": "AzureDataLakeStoreInput",
    "properties":
    {
        "type": "AzureDataLakeStore",
        "linkedServiceName": "AzureDataLakeStoreLinkedService",
        "typeProperties": {
            "folderPath": "datalake/input/",
            "fileName": "SearchLog.tsv",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "\t"
            }
        },
        "external": true,
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "policy": {
            "externalData": {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

Himpunan data output Azure blob

Dalam contoh berikut, data ditulis dari blob baru setiap jam ("frequency": "Hour", "interval": 1). Jalur folder untuk blob dievaluasi secara dinamis berdasarkan waktu mulai irisan yang sedang diproses. Jalur folder menggunakan bagian tahun, bulan, hari, dan jam dari waktu mulai.

{
  "name": "AzureBlobOutput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}",
      "partitionedBy": [
        {
          "name": "Year",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "yyyy"
          }
        },
        {
          "name": "Month",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "MM"
          }
        },
        {
          "name": "Day",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "dd"
          }
        },
        {
          "name": "Hour",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "HH"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": "\t",
        "rowDelimiter": "\n"
      }
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

Aktivitas salin dalam alur dengan sumber blob dan sink Azure Data Lake Store

Dalam contoh berikut, alur berisi aktivitas salin yang dikonfigurasi untuk menggunakan himpunan data input dan output. Aktivitas salin dijadwalkan untuk berjalan setiap jam. Dalam definisi alur JSON, source jenis diatur ke AzureDataLakeStoreSource, dan sink jenis diatur ke BlobSink.

{
    "name":"SamplePipeline",
    "properties":{
        "start":"2014-06-01T18:00:00",
        "end":"2014-06-01T19:00:00",
        "description":"pipeline for copy activity",
        "activities":[
            {
                "name": "AzureDakeLaketoBlob",
                "description": "copy activity",
                "type": "Copy",
                "inputs": [
                    {
                        "name": "AzureDataLakeStoreInput"
                    }
                ],
                "outputs": [
                    {
                        "name": "AzureBlobOutput"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "AzureDataLakeStoreSource",
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                },
                "scheduler": {
                    "frequency": "Hour",
                    "interval": 1
                },
                "policy": {
                    "concurrency": 1,
                    "executionPriorityOrder": "OldestFirst",
                    "retry": 0,
                    "timeout": "01:00:00"
                }
            }
        ]
    }
}

Di dalam definisi aktivitas salin, Anda juga dapat memetakan kolom dari himpunan data sumber ke kolom dari himpunan data sink. Untuk detailnya, lihat Memetakan kolom himpunan data di Azure Data Factory.

Kinerja dan penyetelan

Untuk mempelajari tentang faktor-faktor yang memengaruhi kinerja Salin Aktivitas dan cara mengoptimalkannya, lihat artikel panduan kinerja dan penyetelan Salin Aktivitas.