Bagikan melalui


Migrasikan skema database yang dinormalisasikan dari Azure SQL Database ke kontainer yang denormalisasi Azure Cosmos DB

Panduan ini menjelaskan cara mengambil skema database yang dinormalisasi yang ada di Azure SQL Database dan mengonversinya menjadi skema denormalisasi Azure Cosmos DB untuk dimuat ke Azure Cosmos DB.

Skema SQL biasanya dimodelkan menggunakan bentuk normal ketiga, menghasilkan skema yang dinormalisasi yang memberikan integritas data tingkat tinggi dan lebih sedikit nilai data duplikat. Kueri dapat menggabungkan entitas bersama di seluruh tabel untuk dibaca. Azure Cosmos DB dioptimalkan untuk transaksi super cepat dan kueri dalam koleksi atau kontainer melalui skema denormalisasi dengan data mandiri di dalam dokumen.

Dengan menggunakan Azure Data Factory, kami membangun alur yang menggunakan satu Aliran Data Pemetaan untuk dibaca dari dua tabel yang dinormalisasi Azure SQL Database yang berisi kunci utama dan asing sebagai hubungan entitas. Pabrik data akan menggabungkan tabel tersebut ke dalam satu aliran menggunakan mesin Spark aliran data, mengumpulkan baris yang digabungkan ke dalam array dan menghasilkan dokumen yang dibersihkan individu untuk dimasukkan ke dalam kontainer Azure Cosmos DB baru.

Panduan ini membangun kontainer baru dengan cepat yang disebut "pesanan" yang akan menggunakan SalesOrderHeader tabel dan SalesOrderDetail dari database sampel SQL Server Adventure Works standar. Tabel tersebut mewakili transaksi penjualan yang digabungkan oleh SalesOrderID. Setiap catatan detail unik memiliki kunci utamanya sendiri dari SalesOrderDetailID. Hubungan antara header dan detail adalah 1:M. Kami bergabung di SalesOrderID ADF dan kemudian menggulung setiap catatan detail terkait ke dalam array yang disebut "detail".

Kueri SQL perwakilan untuk panduan ini adalah:

  SELECT
  o.SalesOrderID,
  o.OrderDate,
  o.Status,
  o.ShipDate,
  o.SalesOrderNumber,
  o.ShipMethod,
  o.SubTotal,
  (select SalesOrderDetailID, UnitPrice, OrderQty from SalesLT.SalesOrderDetail od where od.SalesOrderID = o.SalesOrderID for json auto) as OrderDetails
FROM SalesLT.SalesOrderHeader o;

Kontainer Azure Cosmos DB yang dihasilkan menyematkan kueri dalam ke dalam satu dokumen dan terlihat seperti ini:

Koleksi

Buat alur

  1. Pilih +Alur Baru untuk membuat alur baru.

  2. Menambahkan aktivitas aliran data

  3. Dalam aktivitas aliran data, pilih Aliran data pemetaan baru.

  4. Kami membuat grafik aliran data ini:

    Grafik Aliran Data

  5. Tentukan sumber untuk "SourceOrderDetails". Untuk himpunan data, buat himpunan data Azure SQL Database baru yang menunjuk ke SalesOrderDetail tabel.

  6. Tentukan sumber untuk "SourceOrderHeader". Untuk himpunan data, buat himpunan data Azure SQL Database baru yang menunjuk ke SalesOrderHeader tabel.

  7. Di sumber teratas, tambahkan transformasi Kolom Turunan setelah "SourceOrderDetails". Sebut transformasi baru sebagai "TypeCast". Kita perlu membulatkan UnitPrice kolom dan melemparkannya ke jenis data ganda untuk Azure Cosmos DB. Atur rumus menjadi: toDouble(round(UnitPrice,2)).

  8. Tambahkan kolom turunan lain dan sebut saja "MakeStruct". Di sinilah kita membuat struktur hierarkis untuk menahan nilai dari tabel detail. Ingat, detail adalah M:1 relasi dengan header. Beri nama struktur baru orderdetailsstruct dan buat hierarki dengan cara ini, atur setiap subkolom ke nama kolom masuk:

    Buat Struktur

  9. Sekarang, mari kita buka sumber header penjualan. Tambahkan transformasi Gabungan. Untuk sisi kanan pilih "MakeStruct". Biarkan diatur ke gabungan dalam dan pilih SalesOrderID untuk kedua sisi kondisi gabungan.

  10. Pilih tab Pratinjau Data di gabungan baru yang Anda tambahkan sehingga Anda bisa melihat hasil Anda hingga saat ini. Anda akan melihat semua baris header yang digabungkan dengan baris detail. Ini adalah hasil dari penggabungan yang dibentuk dari SalesOrderID. Selanjutnya, kami menggabungkan detail dari baris umum ke dalam struktur detail dan mengagregasi baris umum.

    Bergabung

  11. Sebelum kita dapat membuat array untuk mendenormalisasi baris ini, pertama-tama kita perlu menghapus kolom yang tidak diinginkan dan memastikan nilai data cocok dengan jenis data Azure Cosmos DB.

  12. Tambahkan transformasi Pilih berikutnya dan atur pemetaan bidang agar terlihat seperti ini:

    Scrubber kolom

  13. Sekarang mari kita kembali ke kolom mata uang, kali ini TotalDue. Seperti yang kami lakukan di atas di langkah 7, atur rumus ke: toDouble(round(TotalDue,2)).

  14. Di sinilah kita mendenormalisasi baris dengan mengelompokkan menurut kunci SalesOrderIDumum . Tambahkan transformasi Agregat dan atur grup menjadi SalesOrderID.

  15. Dalam rumus agregat, tambahkan kolom baru yang disebut "detail" dan gunakan rumus ini untuk mengumpulkan nilai dalam struktur yang kami buat sebelumnya yang disebut orderdetailsstruct: collect(orderdetailsstruct).

  16. Transformasi agregat hanya akan menghasilkan kolom output yang merupakan bagian dari agregat atau grup berdasarkan rumus. Jadi, kita perlu menyertakan kolom dari header penjualan juga. Untuk melakukan hal itu, tambahkan pola kolom dalam transformasi agregat yang sama. Pola ini mencakup semua kolom lain dalam output, tidak termasuk kolom yang tercantum di bawah ini (OrderQty, UnitPrice, SalesOrderID):

instr(name,'OrderQty')==0&&instr(name,'UnitPrice')==0&&instr(name,'SalesOrderID')==0

  1. Gunakan sintaks "ini" ($$) di properti lain sehingga kami mempertahankan nama kolom yang sama dan menggunakan fungsi first() sebagai agregat. Ini memberi tahu ADF untuk menjaga nilai pencocokan pertama ditemukan:

    Agregat

  2. Kami siap menyelesaikan alur migrasi dengan menambahkan transformasi sink. Pilih "baru" di samping himpunan data dan tambahkan himpunan data Azure Cosmos DB yang menunjuk ke database Azure Cosmos DB Anda. Untuk koleksi, kami menyebutnya "pesanan" dan tidak memiliki skema dan tidak ada dokumen karena akan dibuat dengan cepat.

  3. Dalam Pengaturan Sink, Kunci Partisi ke /SalesOrderID dan aksi pengumpulan untuk "menciptakan kembali". Pastikan tab pemetaan Anda terlihat seperti ini:

    Cuplikan layar memperlihatkan tab Pemetaan.

  4. Pilih pratinjau data untuk memastikan bahwa Anda melihat 32 baris ini diatur untuk disisipkan sebagai dokumen baru ke dalam kontainer baru Anda:

    Cuplikan layar memperlihatkan tab Pratinjau data.

Jika semuanya terlihat baik, Anda sekarang siap untuk membuat alur baru, tambahkan aktivitas aliran data ini ke alur tersebut dan jalankan. Anda dapat menjalankan dari debug atau proses yang dipicu. Setelah beberapa menit, Anda harus memiliki kontainer pesanan denormalisasi baru yang disebut "pesanan" di database Azure Cosmos DB Anda.