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:
Buat alur
Pilih +Alur Baru untuk membuat alur baru.
Menambahkan aktivitas aliran data
Dalam aktivitas aliran data, pilih Aliran data pemetaan baru.
Kami membuat grafik aliran data ini:
Tentukan sumber untuk "SourceOrderDetails". Untuk himpunan data, buat himpunan data Azure SQL Database baru yang menunjuk ke
SalesOrderDetail
tabel.Tentukan sumber untuk "SourceOrderHeader". Untuk himpunan data, buat himpunan data Azure SQL Database baru yang menunjuk ke
SalesOrderHeader
tabel.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))
.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 baruorderdetailsstruct
dan buat hierarki dengan cara ini, atur setiap subkolom ke nama kolom masuk: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.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.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.
Tambahkan transformasi Pilih berikutnya dan atur pemetaan bidang agar terlihat seperti ini:
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))
.Di sinilah kita mendenormalisasi baris dengan mengelompokkan menurut kunci
SalesOrderID
umum . Tambahkan transformasi Agregat dan atur grup menjadiSalesOrderID
.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)
.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
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: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.
Dalam Pengaturan Sink, Kunci Partisi ke
/SalesOrderID
dan aksi pengumpulan untuk "menciptakan kembali". Pastikan tab pemetaan Anda terlihat seperti ini:Pilih pratinjau data untuk memastikan bahwa Anda melihat 32 baris ini diatur untuk disisipkan sebagai dokumen baru ke dalam kontainer baru Anda:
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.
Konten terkait
- Susun logika aliran data Anda lainnya dengan menggunakan transformasi pemetaan aliran data.
- Unduh templat alur yang sudah selesai untuk tutorial ini dan impor templat ke pabrik Anda.