Toleransi kesalahan aktivitas penyalinan di alur Azure Data Factory dan Synapse Analytics
BERLAKU UNTUK: Azure Data Factory
Azure Synapse Analytics
Tip
Cobalah Data Factory di Microsoft Fabric, solusi analitik all-in-one untuk perusahaan. Microsoft Fabric mencakup semuanya mulai dari pergerakan data hingga ilmu data, analitik real time, kecerdasan bisnis, dan pelaporan. Pelajari cara memulai uji coba baru secara gratis!
Saat Anda menyalin data dari penyimpanan sumber ke penyimpanan tujuan, aktivitas penyalinan menyediakan tingkat toleransi kesalahan tertentu untuk mencegah gangguan dari kegagalan di tengah perpindahan data. Misalnya, Anda menyalin jutaan baris dari sumber ke penyimpanan tujuan, di mana kunci primer telah dibuat di database tujuan, tetapi database sumber tidak memiliki kunci primer yang ditentukan. Ketika Anda menyalin baris duplikat dari sumber ke tujuan, Anda akan mengalami kegagalan pelanggaran PK pada database tujuan. Saat ini, aktivitas salin menawarkan dua cara untuk menangani kesalahan tersebut:
- Anda dapat membatalkan aktivitas salin setelah terjadi kegagalan.
- Anda dapat terus menyalin sisanya dengan mengaktifkan toleransi kegagalan untuk melompati data yang tidak kompatibel. Misalnya, melompati baris yang diduplikasi dalam kasus ini. Selain itu, Anda dapat mencatat data yang dilompati dengan mengaktifkan log sesi dalam aktivitas salin. Anda dapat merujuk ke log sesi dalam aktivitas penyalinan untuk detail selengkapnya.
Menyalin file biner
Layanan ini mendukung skenario toleransi kesalahan berikut saat menyalin file biner. Anda dapat memilih untuk membatalkan aktivitas salin atau terus menyalin sisanya dalam skenario berikut:
- File yang akan disalin oleh layanan sedang dihapus oleh aplikasi lain secara bersamaan.
- Beberapa folder atau file tertentu tidak mengizinkan akses layanan karena ACL dari file atau folder tersebut memerlukan tingkat izin yang lebih tinggi daripada informasi koneksi yang dikonfigurasi.
- Satu atau beberapa file tidak diverifikasi agar konsisten antara penyimpanan sumber dan tujuan jika Anda mengaktifkan pengaturan verifikasi konsistensi data.
Mengaktifkan toleransi kesalahan dengan UI
Untuk mengonfigurasi toleransi kesalahan dalam aktivitas Salin dalam alur dengan UI, selesaikan langkah-langkah berikut:
Jika Anda belum membuat aktivitas Salin untuk alur Anda, telusuri Salin di panel Aktivitas alur, dan seret aktivitas Salin Data ke kanvas alur.
Pilih aktivitas Salin Data baru di kanvas jika belum dipilih, dan tab Pengaturan-nya, untuk mengonfigurasi toleransi kegagalan.
Konfigurasi
Saat Menyalin file biner antar penyimpanan, Anda dapat mengaktifkan toleransi kegagalan sebagai berikut:
{
"name": "CopyActivityFaultTolerance",
"type": "Copy",
"typeProperties": {
"source": {
"type": "BinarySource",
"storeSettings": {
"type": "AzureDataLakeStoreReadSettings",
"recursive": true
}
},
"sink": {
"type": "BinarySink",
"storeSettings": {
"type": "AzureDataLakeStoreWriteSettings"
}
},
"skipErrorFile": {
"fileMissing": true,
"fileForbidden": true,
"dataInconsistency": true,
"invalidFileName": true
},
"validateDataConsistency": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
}
}
Properti | Deskripsi | Nilai yang diizinkan | Wajib |
---|---|---|---|
skipErrorFile | Grup properti untuk menentukan tipe kegagalan yang ingin Anda lompati selama perpindahan data. | No | |
fileMissing | Salah satu pasangan nilai kunci dalam tas properti skipErrorFile untuk menentukan apakah Anda ingin melewati file yang sedang dihapus oleh aplikasi lain pada saat layanan melakukan operasi penyalinan. -True: Anda ingin menyalin sisanya dengan melompati file yang dihapus oleh aplikasi lain. - False: Anda ingin membatalkan aktivitas salin setelah file dihapus dari penyimpanan sumber di tengah perpindahan data. Ketahuilah bahwa properti ini diatur ke true sebagai default. |
True(default) Salah |
No |
fileForbidden | Salah satu pasangan nilai kunci dalam tas properti skipErrorFile untuk menentukan apakah Anda ingin melewati file tertentu, ketika ACL file atau folder tersebut memerlukan tingkat izin yang lebih tinggi daripada koneksi yang dikonfigurasi. -True: Anda ingin menyalin sisanya dengan melompati file. - False: Anda ingin membatalkan aktivitas salin setelah mendapatkan masalah izin pada folder atau file. |
Benar False(default) |
No |
dataInconsistency | Salah satu pasangan kunci-nilai dalam kantong properti skipErrorFile untuk menentukan apakah Anda ingin melompati data yang tidak konsisten antara penyimpanan sumber dan tujuan. -True: Anda ingin menyalin sisanya dengan melompati data yang tidak konsisten. - False: Anda ingin membatalkan aktivitas salin setelah data yang tidak konsisten ditemukan. Ketahuilah bahwa properti ini hanya berlaku saat Anda mengatur validateDataConsistency sebagai True. |
Benar False(default) |
No |
invalidFileName | Salah satu pasangan kunci-nilai dalam kantong properti skipErrorFile untuk menentukan apakah Anda ingin melompati file tertentu, ketika nama file tidak valid untuk penyimpanan tujuan. -True: Anda ingin menyalin sisanya dengan melompati file yang memiliki nama file tidak valid. - False: Anda ingin membatalkan aktivitas salin setelah file memiliki nama file yang tidak valid. Ketahuilah bahwa properti ini hanya berfungsi saat menyalin file biner dari penyimpanan apa pun ke ADLS Gen2 atau menyalin file biner dari AWS S3 ke penyimpanan apa pun. |
Benar False(default) |
No |
logSettings | Grup properti yang bisa ditentukan saat Anda ingin mencatat nama objek yang dilompati. | No | |
linkedServiceName | Layanan tertaut Azure Blob Storage atau Azure Data Lake Storage Gen2 untuk menyimpan file log sesi. | Nama layanan tertaut jenis AzureBlobStorage atau AzureBlobFS , yang merujuk pada instans yang Anda gunakan untuk menyimpan file log. |
No |
jalan | Jalur file log. | Menentukan jalur yang Anda gunakan untuk menyimpan file log. Jika Anda tidak menyediakan jalur, layanan akan membuat kontainer untuk Anda. | No |
Catatan
Berikut ini adalah prasyarat mengaktifkan toleransi kegagalan dalam aktivitas salin saat menyalin file biner. Untuk melompati file tertentu ketika file tersebut sedang dihapus dari penyimpanan sumber:
- Himpunan data sumber dan himpunan data sink harus berformat biner, dan jenis pemadatan tidak dapat ditentukan.
- Jenis penyimpanan data yang didukung adalah penyimpanan Azure Blob, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Files, File System, FTP, SFTP, Amazon S3, Google Cloud Storage, dan HDFS.
- Hanya jika saat Anda menentukan beberapa file dalam himpunan data sumber, yang bisa menjadi folder, wildcard, atau daftar file, aktivitas salin dapat melompati file kesalahan tertentu. Jika satu file ditentukan dalam himpunan data sumber untuk disalin ke tujuan, aktivitas salin akan gagal jika terjadi kesalahan.
Untuk melompati file tertentu ketika aksesnya dilarang dari penyimpanan sumber:
- Himpunan data sumber dan himpunan data sink harus berformat biner, dan jenis pemadatan tidak dapat ditentukan.
- Jenis penyimpanan data yang didukung adalah penyimpanan Azure Blob, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure Files, SFTP, Amazon S3, dan HDFS.
- Hanya jika saat Anda menentukan beberapa file dalam himpunan data sumber, yang bisa menjadi folder, wildcard, atau daftar file, aktivitas salin dapat melompati file kesalahan tertentu. Jika satu file ditentukan dalam himpunan data sumber untuk disalin ke tujuan, aktivitas salin akan gagal jika terjadi kesalahan.
Untuk melompati file tertentu ketika file tersebut diverifikasi menjadi tidak konsisten antara penyimpanan sumber dan tujuan:
- Anda bisa mendapatkan detail selengkapnya dari dokumen konsistensi data di sini.
Pemantauan
Output dari aktivitas salin
Anda bisa mendapatkan jumlah file yang sedang dibaca, ditulis, dan dilompati melalui output setiap aktivitas salin yang dijalankan.
"output": {
"dataRead": 695,
"dataWritten": 186,
"filesRead": 3,
"filesWritten": 1,
"filesSkipped": 2,
"throughput": 297,
"logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"dataConsistencyVerification":
{
"VerificationResult": "Verified",
"InconsistentData": "Skipped"
}
}
Log sesi dari aktivitas salin
Jika Anda mengonfigurasi untuk mencatat nama file yang dilompati, Anda dapat menemukan file log dari jalur ini: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
File log harus merupakan file csv. Skema file log adalah sebagai berikut:
Kolom | Deskripsi |
---|---|
Tanda Waktu | Tanda waktu saat file dilewati. |
Tingkat | Tingkat log item ini. Ini akan berada di tingkat 'Peringatan' untuk item yang menunjukkan lompatan file. |
OperationName | Salin perilaku operasional aktivitas pada setiap file. Ini akan berupa 'FileSkip' untuk menentukan file yang akan dilompati. |
OperationItem | Nama file yang akan dilompati. |
Pesan | Informasi selengkapnya untuk mengilustrasikan mengapa file dilompati. |
Contoh file log adalah sebagai berikut:
Timestamp,Level,OperationName,OperationItem,Message
2020-03-24 05:35:41.0209942,Warning,FileSkip,"bigfile.csv","File is skipped after read 322961408 bytes: ErrorCode=UserErrorSourceBlobNotExist,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=The required Blob is missing. ContainerName: https://transferserviceonebox.blob.core.windows.net/skipfaultyfile, path: bigfile.csv.,Source=Microsoft.DataTransfer.ClientLibrary,'."
2020-03-24 05:38:41.2595989,Warning,FileSkip,"3_nopermission.txt","File is skipped after read 0 bytes: ErrorCode=AdlsGen2OperationFailed,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=ADLS Gen2 operation failed for: Operation returned an invalid status code 'Forbidden'. Account: 'adlsgen2perfsource'. FileSystem: 'skipfaultyfilesforbidden'. Path: '3_nopermission.txt'. ErrorCode: 'AuthorizationPermissionMismatch'. Message: 'This request is not authorized to perform this operation using this permission.'. RequestId: '35089f5d-101f-008c-489e-01cce4000000'..,Source=Microsoft.DataTransfer.ClientLibrary,''Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Operation returned an invalid status code 'Forbidden',Source=,''Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message='Type=Microsoft.Azure.Storage.Data.Models.ErrorSchemaException,Message=Operation returned an invalid status code 'Forbidden',Source=Microsoft.DataTransfer.ClientLibrary,',Source=Microsoft.DataTransfer.ClientLibrary,'."
Dari log di atas, Anda dapat melihat bigfile.csv telah dilewati karena aplikasi lain menghapus file ini saat layanan menyalinnya. Dan 3_nopermission.txt telah dilewati karena layanan tidak diizinkan untuk mengaksesnya karena masalah izin.
Menyalin data tabular
Skenario yang didukung
Aktivitas Salin mendukung tiga skenario untuk mendeteksi, melompati, dan mencatat data yang tidak kompatibel:
Inkompatibilitas antara tipe data sumber dan jenis asli sink.
Misalnya: Menyalin data dari file CSV di penyimpanan Blob ke database SQL dengan definisi skema yang berisi tiga kolom jenis INT. Baris file CSV yang berisi data numerik, seperti 123,456,789 berhasil disalin ke penyimpanan sink. Namun, baris yang berisi nilai non-numerik, seperti 123,456, abc terdeteksi tidak kompatibel dan dilompati.
Ketidakcocokan dalam jumlah kolom antara sumber dan sink.
Misalnya: Salin data dari file CSV di penyimpanan Blob ke database SQL dengan definisi skema yang berisi enam kolom. Baris file CSV yang berisi enam kolom berhasil disalin ke penyimpanan sink. Baris file CSV yang berisi lebih dari enam kolom terdeteksi sebagai tidak kompatibel dan dilompati.
Pelanggaran kunci primer saat menulis ke SQL Server/Azure SQL Database/Azure Cosmos DB.
Misalnya: Menyalin data dari server SQL ke database SQL. Kunci primer ditentukan dalam database SQL sink, tetapi tidak ada kunci primer seperti itu yang ditentukan di server SQL sumber. Baris duplikat yang ada di sumber tidak dapat disalin ke sink. Aktivitas salin hanya menyalin baris pertama data sumber ke sink. Baris sumber berikutnya yang berisi nilai kunci primer duplikat terdeteksi sebagai tidak kompatibel dan dilompati.
Catatan
- Untuk memuat data ke Azure Synapse Analytics menggunakan PolyBase, konfigurasikan pengaturan toleransi kegagalan asli PolyBase dengan menentukan kebijakan penolakan melalui "polyBaseSettings" dalam aktivitas salin. Anda masih dapat mengaktifkan pengalihan baris PolyBase yang tidak kompatibel ke Blob atau ADLS seperti biasa seperti yang ditunjukkan di bawah ini.
- Fitur ini tidak berlaku saat aktivitas salin dikonfigurasi untuk memanggil Amazon Redshift Unload.
- Fitur ini tidak berlaku saat aktivitas salin dikonfigurasi untuk memanggil prosedur tersimpan dari sink SQL, atau menggunakan Upsert untuk menulis data ke sink SQL.
Konfigurasi
Contoh berikut memberikan definisi JSON untuk mengonfigurasi melewati baris yang tidak kompatibel di aktivitas salin:
"typeProperties": {
"source": {
"type": "AzureSqlSource"
},
"sink": {
"type": "AzureSqlSink"
},
"enableSkipIncompatibleRow": true,
"logSettings": {
"enableCopyActivityLog": true,
"copyActivityLogSettings": {
"logLevel": "Warning",
"enableReliableLogging": false
},
"logLocationSettings": {
"linkedServiceName": {
"referenceName": "ADLSGen2",
"type": "LinkedServiceReference"
},
"path": "sessionlog/"
}
}
},
Properti | Deskripsi | Nilai yang diizinkan | Wajib |
---|---|---|---|
enableSkipIncompatibleRow | Menentukan apakah akan melewati baris yang tidak kompatibel selama penyalinan atau tidak. | Benar False (default) |
No |
logSettings | Grup properti yang bisa ditentukan saat Anda ingin mencatat baris yang tidak kompatibel. | No | |
linkedServiceName | Layanan tertaut Azure Blob Storage atau Azure Data Lake Storage Gen2 untuk menyimpan log yang berisi baris yang dilewati. | Nama layanan tertaut jenis AzureBlobStorage atau AzureBlobFS , yang merujuk pada instans yang Anda gunakan untuk menyimpan file log. |
No |
jalan | Jalur file log yang berisi baris yang dilompati. | Menentukan jalur yang ingin Anda gunakan untuk mencatat data yang tidak kompatibel. Jika Anda tidak menyediakan jalur, layanan akan membuat kontainer untuk Anda. | No |
Memantau baris dilompati
Setelah aktivitas salin selesai, Anda dapat melihat jumlah baris yang dilompati di output aktivitas salin:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"logFilePath": "myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
Jika Anda mengonfigurasi untuk mencatat baris yang tidak kompatibel, Anda dapat menemukan file log dari jalur ini: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/copyactivity-logs/[copy-activity-name]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
File log akan menjadi file csv. Skema file log adalah sebagai berikut:
Kolom | Deskripsi |
---|---|
Tanda Waktu | Tanda waktu ketika baris yang tidak kompatibel dilewati |
Tingkat | Tingkat log item ini. Ini akan berada di tingkat 'Peringatan' jika item ini menunjukkan baris yang dilompati |
OperationName | Salin perilaku operasional aktivitas pada setiap baris. Ini akan berupa 'TabularRowSkip' untuk menentukan bahwa baris tertentu yang tidak kompatibel telah dilompati |
OperationItem | Baris yang dilompati dari penyimpanan data sumber. |
Pesan | Informasi selengkapnya untuk mengilustrasikan mengapa inkkompatibilitas baris khusus ini. |
Contoh konten file log adalah sebagai berikut:
Timestamp, Level, OperationName, OperationItem, Message
2020-02-26 06:22:32.2586581, Warning, TabularRowSkip, """data1"", ""data2"", ""data3""," "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
2020-02-26 06:22:33.2586351, Warning, TabularRowSkip, """data4"", ""data5"", ""data6"",", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
Dari sampel file log di atas, Anda dapat melihat satu baris "data1, data2, data3" telah dilompati karena masalah konversi jenis dari penyimpanan sumber ke tujuan. Baris lain "data4, data5, data6" telah dilompati karena masalah pelanggaran PK dari penyimpanan sumber ke tujuan.
Menyalin data tabular (warisan):
Pendekatan berikut ini adalah cara lama untuk mengaktifkan toleransi kegagalan untuk menyalin data tabular saja. Jika Anda membuat alur atau aktivitas baru, Anda dianjurkan untuk memulai dari sini sebagai gantinya.
Konfigurasi
Contoh berikut memberikan definisi JSON untuk mengonfigurasi melewati baris yang tidak kompatibel di aktivitas salin:
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "SqlSink",
},
"enableSkipIncompatibleRow": true,
"redirectIncompatibleRowSettings": {
"linkedServiceName": {
"referenceName": "<Azure Storage or Data Lake Store linked service>",
"type": "LinkedServiceReference"
},
"path": "redirectcontainer/erroroutput"
}
}
Properti | Deskripsi | Nilai yang diizinkan | Wajib |
---|---|---|---|
enableSkipIncompatibleRow | Menentukan apakah akan melewati baris yang tidak kompatibel selama penyalinan atau tidak. | Benar False (default) |
No |
redirectIncompatibleRowSettings | Grup properti yang bisa ditentukan saat Anda ingin mencatat baris yang tidak kompatibel. | No | |
linkedServiceName | Layanan tertaut Azure Storage atau Azure Data Lake Store untuk menyimpan log yang berisi baris yang dilompati. | Nama layanan tertaut jenis AzureStorage atau AzureDataLakeStore , yang merujuk pada instans yang ingin Anda gunakan untuk menyimpan file log. |
No |
jalan | Jalur file log yang berisi baris yang dilompati. | Menentukan jalur yang ingin Anda gunakan untuk mencatat data yang tidak kompatibel. Jika Anda tidak menyediakan jalur, layanan akan membuat kontainer untuk Anda. | No |
Memantau baris dilompati
Setelah aktivitas salin selesai, Anda dapat melihat jumlah baris yang dilompati di output aktivitas salin:
"output": {
"dataRead": 95,
"dataWritten": 186,
"rowsCopied": 9,
"rowsSkipped": 2,
"copyDuration": 16,
"throughput": 0.01,
"redirectRowPath": "https://myblobstorage.blob.core.windows.net//myfolder/a84bf8d4-233f-4216-8cb5-45962831cd1b/",
"errors": []
},
Jika Anda mengonfigurasi untuk mencatat baris yang tidak kompatibel, Anda dapat menemukan file log di jalur ini: https://[your-blob-account].blob.core.windows.net/[path-if-configured]/[copy-activity-run-id]/[auto-generated-GUID].csv
.
File log hanya dapat berupa file csv. Data asli yang dilompati akan dicatat dengan koma sebagai pembatas kolom jika diperlukan. Kami menambahkan dua kolom lagi "ErrorCode" dan "ErrorMessage" selain data sumber asli dalam file log, di mana Anda dapat melihat akar penyebab inkompatibilitas. ErrorCode dan ErrorMessage akan dikutip oleh tanda kutip ganda.
Contoh konten file log adalah sebagai berikut:
data1, data2, data3, "UserErrorInvalidDataValue", "Column 'Prop_2' contains an invalid value 'data3'. Cannot convert 'data3' to type 'DateTime'."
data4, data5, data6, "2627", "Violation of PRIMARY KEY constraint 'PK_tblintstrdatetimewithpk'. Cannot insert duplicate key in object 'dbo.tblintstrdatetimewithpk'. The duplicate key value is (data4)."
Konten terkait
Lihat artikel aktivitas salin lainnya: