Aracılığıyla paylaş


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 SalesOrderHeaderve SalesOrderDetail tablolarını kullanacak "orders" adlı yeni bir kapsayıcı oluşturur. Bu tablolar, tarafından SalesOrderIDbirleş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:

Koleksiyon

İşlem hattı oluşturma

  1. Yeni bir işlem hattı oluşturmak için +Yeni İşlem Hattı'na tıklayın.

  2. Veri akışı etkinliği ekleme

  3. Veri akışı etkinliğinde Yeni eşleme veri akışı'nı seçin.

  4. Bu veri akışı grafiğini oluştururuz:

    Veri Akışı Graph

  5. "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.

  6. "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.

  7. Ü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)).

  8. 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:

    Yapı Oluştur

  9. Ş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 .

  10. 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 SalesOrderIDoluş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.

    Katılın

  11. 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.

  12. Daha sonra bir Select dönüşümü ekleyin ve alan eşlemesini şöyle görünecek şekilde ayarlayın:

    Sütun temizleyici

  13. Şimdi bu kez TotalDuebir 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)).

  14. Burada ortak anahtara SalesOrderIDgöre gruplandırarak satırları normal dışı bırakın. Bir Toplama dönüştürmesi ekleyin ve grubu olarak SalesOrderIDayarlayın.

  15. 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

  16. 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

  1. 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:

    Toplama

  2. 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.

  3. 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:

    Eşleme sekmesini gösteren ekran görüntüsü.

  4. 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:

    Veri önizleme sekmesini gösteren ekran görüntüsü.

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.