Bagikan melalui


Migrasikan data dari Amazon S3 ke Azure Data Lake Storage Gen2

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!

Gunakan templat untuk memigrasikan petabyte data yang terdiri dari ratusan juta file dari Amazon S3 ke Azure Data Lake Storage Gen2.

Catatan

Jika Anda ingin menyalin volume data kecil dari AWS S3 ke Azure (misalnya, kurang dari 10 TB), gunakan Alat Data Salinan Azure Data Factory agar lebih efisien dan mudah. Templat yang dijelaskan dalam artikel ini mencakup lebih dari apa yang Anda butuhkan.

Tentang templat solusi

Partisi data direkomendasikan terutama ketika memigrasikan lebih dari 10 TB data. Untuk mempartisi data, manfaatkan pengaturan 'awalan' untuk memfilter folder dan file di Amazon S3 berdasarkan nama, dan kemudian setiap pekerjaan penyalinan ADF dapat menyalin satu partisi sekaligus. Anda dapat menjalankan beberapa pekerjaan penyalinan ADF secara bersamaan untuk throughput yang lebih baik.

Migrasi data biasanya memerlukan migrasi data historis satu kali ditambah secara berkala menyinkronkan perubahan dari AWS S3 ke Azure. Ada dua templat di bawah ini, di mana satu templat mencakup migrasi data historis satu kali dan templat lain mencakup sinkronisasi perubahan dari AWS S3 ke Azure.

Agar templat memigrasikan data historis dari Amazon S3 ke Azure Data Lake Storage Gen2

Templat ini (nama templat: memigrasikan data historis dari AWS S3 ke Azure Data Lake Storage Gen2) mengasumsikan bahwa Anda telah menulis daftar partisi dalam tabel kontrol eksternal di Azure SQL Database. Jadi templat akan menggunakan aktivitas Pencarian untuk mengambil daftar partisi dari tabel kontrol eksternal, melakukan iterasi pada setiap partisi, dan membuat setiap pekerjaan penyalinan ADF menyalin satu partisi pada satu waktu. Setelah pekerjaan penyalinan selesai, templat menggunakan aktivitas Prosedur Tersimpan untuk memperbarui status penyalinan setiap partisi dalam tabel kontrol.

Templat berisi lima aktivitas:

  • Pencarian mengambil partisi yang belum disalin ke Azure Data Lake Storage Gen2 dari tabel kontrol eksternal. Nama tabel adalah s3_partition_control_table dan kueri untuk memuat data dari tabel adalah "SELECT PartitionPrefix FROM s3_partition_control_table WHERE SuccessOrFailure = 0".
  • ForEach mendapatkan daftar partisi dari aktivitas Pencarian dan melakukan iterasi pada setiap partisi ke aktivitas TriggerCopy. Anda dapat mengatur batchCount untuk menjalankan beberapa pekerjaan penyalinan ADF secara bersamaan. Kami telah menetapkan 2 dalam templat ini.
  • ExecutePipeline menjalankan alur CopyFolderPartitionFromS3. Alasan kami membuat alur lain agar setiap pekerjaan penyalinan menyalin partisi adalah karena partisi tersebut akan memudahkan Anda untuk menjalankan kembali pekerjaan penyalinan yang gagal memuat ulang kembali partisi tertentu tersebut dari AWS S3. Semua pekerjaan penyalinan lainnya yang memuat partisi lain tidak akan terpengaruh.
  • Salin salinan setiap partisi dari AWS S3 ke Azure Data Lake Storage Gen2.
  • SqlServerStoredProcedure memperbarui status penyalinan setiap partisi dalam tabel kontrol.

Templat berisi dua parameter:

  • AWS_S3_bucketName adalah nama wadah Anda di AWS S3 tempat asal data yang akan Anda migrasikan. Jika Anda ingin memigrasikan data dari beberapa wadah di AWS S3, Anda dapat menambahkan satu kolom lagi di tabel kontrol eksternal untuk menyimpan nama wadah untuk setiap partisi, dan juga memperbarui alur Anda untuk mengambil data dari kolom tersebut sesuai kebutuhan.
  • Azure_Storage_fileSystem adalah nama fileSystem Anda di Azure Data Lake Storage Gen2 tempat Anda ingin melakukan migrasi data.

Agar templat dapat menyalin file yang diubah hanya dari Amazon S3 ke Azure Data Lake Storage Gen2

Templat ini (nama templat: menyalin data delta dari AWS S3 ke Azure Data Lake Storage Gen2) menggunakan LastModifiedTime dari setiap file untuk menyalin file baru atau yang diperbarui hanya dari AWS S3 ke Azure. Ketahui apakah file atau folder Anda telah mengalami time partitioned dengan informasi timeslice sebagai bagian dari nama file atau folder di AWS S3 (misalnya, /yyyy/mm/dd/file.csv), Anda dapat membuka tutorial ini untuk mendapatkan pendekatan yang lebih berperforma untuk memuat file baru secara bertahap. Templat ini mengasumsikan bahwa Anda telah menulis daftar partisi dalam tabel kontrol eksternal di Azure SQL Database. Jadi templat akan menggunakan aktivitas Pencarian untuk mengambil daftar partisi dari tabel kontrol eksternal, melakukan iterasi pada setiap partisi, dan membuat setiap pekerjaan penyalinan ADF menyalin satu partisi pada satu waktu. Ketika setiap pekerjaan penyalinan mulai menyalin file dari AWS S3, properti LastModifiedTime akan menentukan proses mengidentifikasi dan menyalin file baru atau hanya memperbarui file. Setelah pekerjaan penyalinan selesai, templat menggunakan aktivitas Prosedur Tersimpan untuk memperbarui status penyalinan setiap partisi dalam tabel kontrol.

Templat berisi tujuh aktivitas:

  • Pencarian mengambil partisi dari tabel kontrol eksternal. Nama tabel adalah s3_partition_delta_control_table dan kueri untuk memuat data dari tabel adalah "select distinct PartitionPrefix from s3_partition_delta_control_table".
  • ForEach mendapatkan daftar partisi dari aktivitas Pencarian dan melakukan iterasi pada setiap partisi ke aktivitas TriggerDeltaCopy. Anda dapat mengatur batchCount untuk menjalankan beberapa pekerjaan penyalinan ADF secara bersamaan. Kami telah menetapkan 2 dalam templat ini.
  • ExecutePipeline menjalankan alur DeltaCopyFolderPartitionFromS3. Alasan kami membuat alur lain agar setiap pekerjaan penyalinan menyalin partisi adalah karena partisi tersebut akan memudahkan Anda untuk menjalankan kembali pekerjaan penyalinan yang gagal memuat ulang kembali partisi tertentu tersebut dari AWS S3. Semua pekerjaan penyalinan lainnya yang memuat partisi lain tidak akan terpengaruh.
  • Pencarian mengambil durasi pekerjaan penyalinan terakhir dari tabel kontrol eksternal agar file baru atau yang diperbarui dapat diidentifikasi melalui LastModifiedTime. Nama tabel adalah s3_partition_delta_control_table dan kueri untuk memuat data dari tabel adalah "select max(JobRunTime) as LastModifiedTime from s3_partition_delta_control_table where PartitionPrefix = '@{pipeline().parameters.prefixStr}' and SuccessOrFailure = 1".
  • Menyalin salinan file baru atau yang diubah hanya untuk setiap partisi dari AWS S3 ke Azure Data Lake Storage Gen2. Properti modifiedDatetimeStart diatur ke durasi pekerjaan salin terakhir. Properti modifiedDatetimeEnd diatur ke durasi pekerjaan salin saat ini. Perhatikan bahwa waktu diterapkan ke zona waktu UTC.
  • SqlServerStoredProcedure memperbarui status penyalinan setiap partisi dan menyalin durasi dalam tabel kontrol ketika berhasil. Kolom SuccessOrFailure diatur ke 1.
  • SqlServerStoredProcedure memperbarui status penyalinan setiap partisi dan menyalin durasi dalam tabel kontrol ketika gagal. Kolom SuccessOrFailure diatur ke 0.

Templat berisi dua parameter:

  • AWS_S3_bucketName adalah nama wadah Anda di AWS S3 tempat asal data yang akan Anda migrasikan. Jika Anda ingin memigrasikan data dari beberapa wadah di AWS S3, Anda dapat menambahkan satu kolom lagi di tabel kontrol eksternal untuk menyimpan nama wadah untuk setiap partisi, dan juga memperbarui alur Anda untuk mengambil data dari kolom tersebut sesuai kebutuhan.
  • Azure_Storage_fileSystem adalah nama fileSystem Anda di Azure Data Lake Storage Gen2 tempat Anda ingin melakukan migrasi data.

Cara menggunakan dua templat solusi ini

Agar templat memigrasikan data historis dari Amazon S3 ke Azure Data Lake Storage Gen2

  1. Buat tabel kontrol di Azure SQL Database untuk menyimpan daftar partisi AWS S3.

    Catatan

    Nama tabel adalah s3_partition_control_table. Skema tabel kontrol adalah PartitionPrefix dan SuccessOrFailure, di mana PartitionPrefix adalah pengaturan prefiks di S3 untuk memfilter folder dan file di Amazon S3 berdasarkan nama, dan SuccessOrFailure adalah status penyalinan setiap partisi: 0 berarti partisi ini belum disalin ke Azure dan 1 berarti partisi ini telah berhasil disalin ke Azure. Terdapat 5 partisi yang ditentukan dalam tabel kontrol dan status default penyalinan setiap partisi adalah 0.

    CREATE TABLE [dbo].[s3_partition_control_table](
        [PartitionPrefix] [varchar](255) NULL,
        [SuccessOrFailure] [bit] NULL
    )
    
    INSERT INTO s3_partition_control_table (PartitionPrefix, SuccessOrFailure)
    VALUES
    ('a', 0),
    ('b', 0),
    ('c', 0),
    ('d', 0),
    ('e', 0);
    
  2. Buat Prosedur Tersimpan di Azure SQL Database yang sama untuk tabel kontrol.

    Catatan

    Nama Prosedur Tersimpan adalah sp_update_partition_success. Nama ini akan dipanggil oleh aktivitas SqlServerStoredProcedure di alur ADF Anda.

    CREATE PROCEDURE [dbo].[sp_update_partition_success] @PartPrefix varchar(255)
    AS
    BEGIN
    
        UPDATE s3_partition_control_table
        SET [SuccessOrFailure] = 1 WHERE [PartitionPrefix] = @PartPrefix
    END
    GO
    
  3. Buka templat Melakukan migrasi data historis dari AWS S3 ke Azure Data Lake Storage Gen2. Masukkan koneksi ke tabel kontrol eksternal Anda, AWS S3 sebagai penyimpanan sumber data dan Azure Data Lake Storage Gen2 sebagai penyimpanan tujuan. Perhatikan bahwa tabel kontrol eksternal dan prosedur tersimpan adalah referensi pada koneksi yang sama.

    Cuplikan layar yang memperlihatkan templat Migrasi data historis dari AWS S3 ke Azure Data Lake Storage Gen2.

  4. Pilih Gunakan templat ini.

    Cuplikan layar yang menyoroti tombol Gunakan templat ini.

  5. Anda dapat melihat 2 alur dan 3 himpunan data telah dibuat sebelumnya, seperti yang ditunjukkan dalam contoh berikut:

    Cuplikan layar yang memperlihatkan dua saluran dan tiga himpunan data yang telah dibuat sebelumnya menggunakan templat.

  6. Buka alur "BulkCopyFromS3" dan pilih Debug, masukkan Parameter. Lalu, pilih Selesai.

    Cuplikan layar yang memperlihatkan tempat untuk memilih Debug dan memasukkan parameter sebelum Anda memilih Selesai.

  7. Anda melihat hasil yang mirip dengan contoh berikut:

    Cuplikan layar yang memperlihatkan hasil yang dikembalikan.

Agar templat dapat menyalin file yang diubah hanya dari Amazon S3 ke Azure Data Lake Storage Gen2

  1. Buat tabel kontrol di Azure SQL Database untuk menyimpan daftar partisi AWS S3.

    Catatan

    Nama tabel adalah s3_partition_control_table. Skema tabel kontrol adalah PartitionPrefix,JobRunTime, dan SuccessOrFailure, di mana PartitionPrefix adalah pengaturan prefiks di S3 untuk memfilter folder dan file di Amazon S3 berdasarkan nama,JobRunTime adalah nilai tanggalwaktu ketika pekerjaan penyalinan berjalan, dan SuccessOrFailure adalah status penyalinan setiap partisi: 0 berarti partisi ini belum disalin ke Azure dan 1 berarti partisi ini telah berhasil disalin ke Azure. Ada 5 partisi yang ditentukan dalam tabel kontrol. Nilai default untuk JobRunTime dapat berisi waktu ketika migrasi data historis satu kali dimulai. Aktivitas penyalinan ADF akan menyalin file di AWS S3 yang terakhir dimodifikasi setelah waktu tersebut. Status default penyalinan setiap partisi adalah 1.

    CREATE TABLE [dbo].[s3_partition_delta_control_table](
        [PartitionPrefix] [varchar](255) NULL,
        [JobRunTime] [datetime] NULL,
        [SuccessOrFailure] [bit] NULL
        )
    
    INSERT INTO s3_partition_delta_control_table (PartitionPrefix, JobRunTime, SuccessOrFailure)
    VALUES
    ('a','1/1/2019 12:00:00 AM',1),
    ('b','1/1/2019 12:00:00 AM',1),
    ('c','1/1/2019 12:00:00 AM',1),
    ('d','1/1/2019 12:00:00 AM',1),
    ('e','1/1/2019 12:00:00 AM',1);
    
  2. Buat Prosedur Tersimpan di Azure SQL Database yang sama untuk tabel kontrol.

    Catatan

    Nama Prosedur Tersimpan adalah sp_insert_partition_JobRunTime_success. Nama ini akan dipanggil oleh aktivitas SqlServerStoredProcedure di alur ADF Anda.

    CREATE PROCEDURE [dbo].[sp_insert_partition_JobRunTime_success] @PartPrefix varchar(255), @JobRunTime datetime, @SuccessOrFailure bit
    AS
    BEGIN
        INSERT INTO s3_partition_delta_control_table (PartitionPrefix, JobRunTime, SuccessOrFailure)
        VALUES
            (@PartPrefix,@JobRunTime,@SuccessOrFailure)
    END
    GO
    
  3. Buka templat Salin data delta dari AWS S3 ke Azure Data Lake Storage Gen2. Masukkan koneksi ke tabel kontrol eksternal Anda, AWS S3 sebagai penyimpanan sumber data dan Azure Data Lake Storage Gen2 sebagai penyimpanan tujuan. Perhatikan bahwa tabel kontrol eksternal dan prosedur tersimpan adalah referensi pada koneksi yang sama.

    Buat koneksi baru

  4. Pilih Gunakan templat ini.

    Gunakan templat ini

  5. Anda dapat melihat 2 alur dan 3 himpunan data telah dibuat sebelumnya, seperti yang ditunjukkan dalam contoh berikut:

    Tinjau ulang alur

  6. Buka alur "DeltaCopyFromS3" dan pilih Debug, dan masukkan Parameter. Lalu, pilih Selesai.

    Klik **Debug**

  7. Anda melihat hasil yang mirip dengan contoh berikut:

    Tinjau hasilnya

  8. Anda juga dapat memeriksa hasil dari tabel kontrol dengan kueri "pilih * dari s3_partition_delta_control_table", Anda akan melihat output yang mirip dengan contoh berikut:

    Cuplikan layar yang memperlihatkan hasil dari tabel kontrol setelah Anda menjalankan kueri.