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:

  1. File yang akan disalin oleh layanan sedang dihapus oleh aplikasi lain secara bersamaan.
  2. 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.
  3. 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:

  1. Jika Anda belum membuat aktivitas Salin untuk alur Anda, telusuri Salin di panel Aktivitas alur, dan seret aktivitas Salin Data ke kanvas alur.

  2. Pilih aktivitas Salin Data baru di kanvas jika belum dipilih, dan tab Pengaturan-nya, untuk mengonfigurasi toleransi kegagalan.

    Shows the UI for a Copy Data activity on the Settings tab with the Fault Tolerance configuration highlighted.

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. Tidak
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
Tidak
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)
Tidak
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)
Tidak
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)
Tidak
logSettings Grup properti yang bisa ditentukan saat Anda ingin mencatat nama objek yang dilompati.   Tidak
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. Tidak
jalan Jalur file log. Menentukan jalur yang Anda gunakan untuk menyimpan file log. Jika Anda tidak menyediakan jalur, layanan akan membuat kontainer untuk Anda. Tidak

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)
Tidak
logSettings Grup properti yang bisa ditentukan saat Anda ingin mencatat baris yang tidak kompatibel.   Tidak
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. Tidak
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. Tidak

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)
Tidak
redirectIncompatibleRowSettings Grup properti yang bisa ditentukan saat Anda ingin mencatat baris yang tidak kompatibel.   Tidak
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. Tidak
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. Tidak

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)."

Lihat artikel aktivitas salin lainnya: