Salinan yang dapat diulang di Azure Data Factory

Bacaan berulang dari sumber relasional

Saat menyalin data dari penyimpanan data relasional, ingatlah pengulangan untuk menghindari hasil yang tidak diinginkan. Di Azure Data Factory, Anda dapat menjalankan ulang irisan secara manual. Anda juga dapat mengonfigurasi kebijakan coba lagi untuk himpunan data sehingga irisan diulang saat kegagalan terjadi. Saat irisan diulang dengan cara apa pun, Anda perlu memastikan bahwa data yang sama dibaca tidak peduli berapa kali irisan dijalankan.

Catatan

Sampel berikut adalah untuk Azure SQL, tetapi berlaku untuk setiap penyimpanan data yang mendukung himpunan data persegi. Anda mungkin harus menyesuaikan jenis sumber dan properti kueri (misalnya: kueri alih-alih sqlReaderQuery) untuk penyimpanan data.

Biasanya, ketika membaca dari penyimpanan relasional, Anda hanya ingin membaca data yang sesuai dengan irisan itu. Cara untuk melakukannya adalah dengan menggunakan variabel sistem WindowStart dan WindowEnd yang tersedia di Azure Data Factory. Baca tentang variabel dan fungsi di Azure Data Factory di sini di artikel Azure Data Factory - Fungsi dan Variabel Sistem. Contoh:

"source": {
    "type": "SqlSource",
    "sqlReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd HH:mm\\' AND timestampcolumn < \\'{1:yyyy-MM-dd HH:mm\\'', WindowStart, WindowEnd)"
},

Kueri ini membaca data yang termasuk dalam rentang durasi irisan (WindowStart -> WindowEnd) dari tabel MyTable. Operasional ulang dari irisan ini juga akan selalu memastikan bahwa data yang sama dibaca.

Dalam kasus lain, Anda mungkin ingin membaca seluruh tabel dan dapat menentukan sqlReaderQuery sebagai berikut:

"source": 
{            
    "type": "SqlSource",
    "sqlReaderQuery": "select * from MyTable"
},

Penulisan yang dapat diulang ke SqlSink

Saat menyalin data ke Azure SQL /SQL Server dari penyimpanan data lain, Anda perlu mengingat pengulangan untuk menghindari hasil yang tidak diinginkan.

Saat menyalin data ke Azure SQL/SQL Server Database, aktivitas salin menambahkan data ke tabel sink secara default. Misalnya, Anda menyalin data dari file CSV (nilai yang dipisahkan koma) yang berisi dua rekaman ke tabel berikut ini dalam Database Azure SQL /SQL Server. Saat irisan berjalan, dua rekaman disalin ke tabel SQL.

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    2            2015-05-01 00:00:00

Misalkan Anda menemukan kesalahan dalam file sumber dan memperbarui kuantitas Down Tube dari 2 hingga 4. Jika Anda menjalankan ulang irisan data untuk periode tersebut secara manual, Anda akan menemukan dua catatan baru yang ditambahkan ke Azure SQL/SQL Server Database. Contoh ini mengasumsikan bahwa tidak ada kolom dalam tabel yang memiliki batasan kunci utama.

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    2            2015-05-01 00:00:00
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    4            2015-05-01 00:00:00

Untuk menghindari perilaku ini, Anda perlu menentukan semantik UPSERT dengan menggunakan salah satu dari dua mekanisme berikut:

Mekanisme 1: menggunakan sqlWriterCleanupScript

Anda dapat menggunakan properti sqlWriterCleanupScript untuk membersihkan data dari tabel sink sebelum menyisipkan data saat irisan dijalankan.

"sink":  
{ 
  "type": "SqlSink", 
  "sqlWriterCleanupScript": "$$Text.Format('DELETE FROM table WHERE ModifiedDate >= \\'{0:yyyy-MM-dd HH:mm}\\' AND ModifiedDate < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
}

Saat irisan berjalan, skrip pembersihan dijalankan terlebih dahulu untuk menghapus data yang sesuai dengan irisan dari tabel SQL. Aktivitas salin kemudian menyisipkan data ke dalam SQL Table. Jika irisan diulang, kuantitas diperbarui seperti yang diinginkan.

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
6    Flat Washer    3            2015-05-01 00:00:00
7     Down Tube    4            2015-05-01 00:00:00

Misalkan catatan Flat Washer dihapus dari csv asli. Kemudian penjalanan kembali irisan akan menghasilkan hasil berikut:

ID    Product        Quantity    ModifiedDate
...    ...            ...            ...
7     Down Tube    4            2015-05-01 00:00:00

Aktivitas salin menjalankan skrip pembersihan untuk menghapus data yang sesuai untuk irisan tersebut. Kemudian membaca input dari csv (yang kemudian hanya berisi satu catatan) dan memasukkannya ke dalam Tabel.

Mekanisme 2: menggunakan sliceIdentifierColumnName

Penting

Saat ini, sliceIdentifierColumnName tidak didukung untuk Azure Synapse Analytics.

Mekanisme kedua untuk mencapai pengulangan adalah dengan memiliki kolom khusus (sliceIdentifierColumnName) dalam Tabel target. Kolom ini akan digunakan oleh Azure Data Factory untuk memastikan sumber dan tujuan tetap disinkronkan. Pendekatan ini berfungsi ketika ada fleksibilitas dalam mengubah atau mendefinisikan skema SQL Table tujuan.

Kolom ini digunakan oleh Azure Data Factory untuk tujuan pengulangan dan dalam prosesnya Azure Data Factory tidak membuat perubahan skema apa pun pada Tabel. Cara menggunakan pendekatan ini:

  1. Tentukan kolom jenis biner (32) di SQL Table tujuan. Seharusnya tidak ada batasan pada kolom ini. Mari kita beri nama kolom ini sebagai AdfSliceIdentifier untuk contoh ini.

    Tabel sumber:

    CREATE TABLE [dbo].[Student](
       [Id] [varchar](32) NOT NULL,
       [Name] [nvarchar](256) NOT NULL
    )
    

    Tabel tujuan:

    CREATE TABLE [dbo].[Student](
       [Id] [varchar](32) NOT NULL,
       [Name] [nvarchar](256) NOT NULL,
       [AdfSliceIdentifier] [binary](32) NULL
    )
    
  2. Gunakan dalam aktivitas salin sebagai berikut:

    "sink":  
    { 
    
        "type": "SqlSink", 
        "sliceIdentifierColumnName": "AdfSliceIdentifier"
    }
    

Azure Data Factory mengisi kolom ini sesuai kebutuhannya untuk memastikan sumber dan tujuan tetap disinkronkan. Nilai kolom ini tidak boleh digunakan di luar konteks ini.

Mirip dengan mekanisme 1, Aktivitas Salin secara otomatis membersihkan data untuk irisan yang diberikan dari SQL Table tujuan. Kemudian menyisipkan data dari sumber ke tabel tujuan.

Langkah berikutnya

Tinjau artikel konektor berikut yang untuk contoh JSON lengkap: