Normalleştirilmiş veritabanı şemasını Azure SQL Veritabanı'den Azure Cosmos DB normalleştirilmiş kapsayıcısına geçirme
Bu kılavuzda, Azure SQL Veritabanı'da mevcut bir normalleştirilmiş veritabanı şemasının nasıl alınıp Azure Cosmos DB'ye yüklenmek üzere normalleştirilmiş bir Azure Cosmos DB şemasına nasıl dönüştürüldüğü açıklanmaktadır.
SQL şemaları genellikle üçüncü normal form kullanılarak modellenir ve sonuçta yüksek düzeyde veri bütünlüğü ve daha az yinelenen veri değeri sağlayan normalleştirilmiş şemalar elde edilir. Sorgular, varlıkları okumak üzere tablolar arasında birleştirebilir. Azure Cosmos DB, bir belgenin içinde kendi içinde bulunan verilerle normalleştirilmiş şemalar aracılığıyla bir koleksiyon veya kapsayıcı içinde süper hızlı işlemler ve sorgulama için iyileştirilmiştir.
Azure Data Factory'yi kullanarak, varlık ilişkisi olarak birincil ve yabancı anahtarlar içeren iki Azure SQL Veritabanı normalleştirilmiş tablodan okumak için tek bir Eşleme Veri Akışı kullanan bir işlem hattı oluştururuz. Veri fabrikası, veri akışı Spark altyapısını kullanarak bu tabloları tek bir akışta birleştirir, birleştirilmiş satırları diziler halinde toplar ve yeni bir Azure Cosmos DB kapsayıcısına eklemek için ayrı ayrı temizlenmiş belgeler oluşturur.
Bu kılavuz, standart SQL Server Adventure Works örnek veritabanındaki SalesOrderHeader
ve SalesOrderDetail
tablolarını kullanacak "orders" adlı yeni bir kapsayıcı oluşturur. Bu tablolar, tarafından SalesOrderID
birleştirilen satış işlemlerini temsil eder. Her benzersiz ayrıntı kaydının kendi birincil anahtarı vardır SalesOrderDetailID
. Üst bilgi ve ayrıntı arasındaki ilişki şeklindedir 1:M
. ADF'de birleştirmeye devam SalesOrderID
ediyoruz ve ardından ilgili her ayrıntı kaydını "detail" adlı bir diziye aktarıyoruz.
Bu kılavuz için temsili SQL sorgusu:
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;
Sonuçta elde edilen Azure Cosmos DB kapsayıcısı iç sorguyu tek bir belgeye ekler ve şöyle görünür:
İşlem hattı oluşturma
Yeni bir işlem hattı oluşturmak için +Yeni İşlem Hattı'na tıklayın.
Veri akışı etkinliği ekleme
Veri akışı etkinliğinde Yeni eşleme veri akışı'nı seçin.
Bu veri akışı grafiğini oluştururuz:
"SourceOrderDetails" için kaynağı tanımlayın. Veri kümesi için tabloya
SalesOrderDetail
işaret eden yeni bir Azure SQL Veritabanı veri kümesi oluşturun."SourceOrderHeader" kaynağını tanımlayın. Veri kümesi için tabloya
SalesOrderHeader
işaret eden yeni bir Azure SQL Veritabanı veri kümesi oluşturun.Üst kaynakta, "SourceOrderDetails" sonrasında Türetilmiş Sütun dönüşümü ekleyin. Yeni dönüşümü "TypeCast" olarak adlandırın. Sütunu yuvarlamalı
UnitPrice
ve Azure Cosmos DB için bir çift veri türüne dönüştürmemiz gerekir. Formülü olarak ayarlayın:toDouble(round(UnitPrice,2))
.Başka bir türetilmiş sütun ekleyin ve buna "MakeStruct" adını verin. Burası, ayrıntılar tablosundaki değerleri tutmak için hiyerarşik bir yapı oluşturduğumuz yerdir. Ayrıntıların üst bilgiyle bir ilişki olduğunu
M:1
unutmayın. Yeni yapıyıorderdetailsstruct
adlandırın ve hiyerarşiyi bu şekilde oluşturun ve her alt sütunu gelen sütun adına ayarlayın:Şimdi satış üst bilgisi kaynağına gidelim. Join dönüşümü ekleyin. Sağ taraf için "Yapı Yap"ı seçin. İç birleşim olarak bırakın ve birleştirme koşulunun her iki tarafını da seçin
SalesOrderID
.Eklediğiniz yeni birleşimde Veri Önizleme sekmesini seçerek sonuçlarınızı bu noktaya kadar görebilirsiniz. Tüm üst bilgi satırlarının ayrıntı satırlarıyla birleştirdiğini görmeniz gerekir. Bu, 'den
SalesOrderID
oluşturulan birleştirmenin sonucudur. Ardından, ortak satırlardan ayrıntıları ayrıntılar yapısıyla birleştirip ortak satırları toplayacağız.Bu satırları normalden çıkarmak için diziler oluşturabilmek için önce istenmeyen sütunları kaldırmamız ve veri değerlerinin Azure Cosmos DB veri türleriyle eşleştiğinden emin olmamız gerekir.
Daha sonra bir Select dönüşümü ekleyin ve alan eşlemesini şöyle görünecek şekilde ayarlayın:
Şimdi bu kez
TotalDue
bir para birimi sütunu oluşturalım. Yukarıda 7. adımda yaptığımız gibi formülü olarak ayarlayın:toDouble(round(TotalDue,2))
.Burada ortak anahtara
SalesOrderID
göre gruplandırarak satırları normal dışı bırakın. Bir Toplama dönüştürmesi ekleyin ve grubu olarakSalesOrderID
ayarlayın.Toplama formülüne "details" adlı yeni bir sütun ekleyin ve bu formülü kullanarak daha önce oluşturduğumuz yapısındaki değerlerin adı :
collect(orderdetailsstruct)
.orderdetailsstruct
Toplama dönüşümü yalnızca toplama veya formüllere göre gruplandırma işleminin parçası olan sütunların çıktısını alır. Bu nedenle, satış üst bilgisindeki sütunları da eklememiz gerekir. Bunu yapmak için aynı toplama dönüşümüne bir sütun deseni ekleyin. Bu desen, aşağıda listelenen sütunlar (OrderQty, UnitPrice, SalesOrderID) hariç, çıktıdaki diğer tüm sütunları içerir:
instr(name,'OrderQty')==0&&instr(name,'UnitPrice')==0&&instr(name,'SalesOrderID')==0
Aynı sütun adlarını koruyabilmemiz ve işlevi toplama olarak kullanmamız için diğer özelliklerde "this" söz dizimini
first()
($$) kullanın. Bu, ADF'ye bulunan ilk eşleşen değeri tutmasını söyler:Havuz dönüşümü ekleyerek geçiş akışını tamamlamaya hazırız. Veri kümesinin yanındaki "yeni" seçeneğini belirleyin ve Azure Cosmos DB veritabanınıza işaret eden bir Azure Cosmos DB veri kümesi ekleyin. Koleksiyon için buna "siparişler" diyoruz ve anında oluşturulacağı için şeması ve belgesi yok.
Havuz Ayarları'nda Bölüm Anahtarı ve
/SalesOrderID
"yeniden oluşturmak" için toplama eylemi. Eşleme sekmenizin şu şekilde göründüğüne emin olun:Bu 32 satırın yeni kapsayıcınıza yeni belge olarak eklenecek şekilde ayarlandığından emin olmak için veri önizlemesini seçin:
Her şey iyi görünüyorsa artık yeni bir işlem hattı oluşturmaya, bu veri akışı etkinliğini bu işlem hattına eklemeye ve yürütmeye hazırsınız demektir. Hata ayıklama veya tetiklenen çalıştırmadan yürütebilirsiniz. Birkaç dakika sonra Azure Cosmos DB veritabanınızda "orders" adlı yeni bir normalleştirilmiş sipariş kapsayıcınız olmalıdır.
İlgili içerik
- Eşleme veri akışları dönüşümlerini kullanarak veri akışı mantığınızın geri kalanını oluşturun.
- Bu öğretici için tamamlanmış işlem hattı şablonunu indirin ve şablonu fabrikanıza aktarın.