normalleştirilmiş veritabanı şemasını Azure SQL Veritabanı ' den Azure Cosmos DB denormallanmış kapsayıcıya geçir

bu kılavuzda, var olan bir normalleştirilmiş veritabanı şemasının Azure SQL Veritabanı nasıl ele alınacağını ve Azure Cosmos DB yüklemek için Azure Cosmos DB bir veya daha fazla sayıda şemaya nasıl dönüştürüleceği açıklanmaktadır.

SQL şemaları genellikle üçüncü normal form kullanılarak modellenmiştir ve yüksek düzeyde veri bütünlüğü ve daha az yinelenen veri değeri sağlayan normalleştirilmiş şemalar sağlar. Sorgular, varlıkları okuma için tablolar arasında birbirine birleştirebilirler. CosmosDB, süper hızlı işlemler için en iyi duruma getirilmiştir ve bir belge içindeki verilerle birlikte kapsanan şemalar aracılığıyla bir koleksiyon ya da kapsayıcı içinde sorgulama yapılır.

Azure Data Factory 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 Flow kullanan bir işlem hattı oluşturacağız. ADF, 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 tek bir temizleme belgesi oluşturur.

bu kılavuz, SalesOrderHeader SalesOrderDetail standart SQL Server AdventureWorks örnek veritabanından ve tablolarını kullanacak olan "orders" adlı yeni bir kapsayıcı oluşturacak. Bu tablolar tarafından birleştirilen satış işlemlerini temsil eder SalesOrderID . Her benzersiz ayrıntı kaydının kendi birincil anahtarı vardır SalesOrderDetailID . Üst bilgi ve ayrıntı arasındaki ilişki 1:M . SalesOrderIDADF 'de ve ardından her ilgili ayrıntı kaydını "ayrıntı" adlı bir diziye aktaracağız.

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;

Elde edilen CosmosDB kapsayıcısı, iç sorguyu tek bir belgeye katıştırır ve şöyle görünür:

Koleksiyon

İşlem hattı oluşturma

  1. Yeni bir işlem hattı oluşturmak için + Yeni Işlem hattı ' nı seçin.

  2. Veri akışı etkinliği ekleyin

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

  4. Bu veri akışı grafiğini aşağıdan oluşturacağız

veri Flow Graph

  1. "SourceOrderDetails" kaynağını tanımlayın. veri kümesi için, tabloya işaret eden yeni bir Azure SQL Veritabanı veri kümesi oluşturun SalesOrderDetail .

  2. "SourceOrderHeader" kaynağını tanımlayın. veri kümesi için, tabloya işaret eden yeni bir Azure SQL Veritabanı veri kümesi oluşturun SalesOrderHeader .

  3. Üst kaynakta, "SourceOrderDetails" öğesinden sonra bir türetilmiş sütun dönüştürmesi ekleyin. Yeni "TypeCast" dönüşümünü çağırın. Sütunu yuvarlayıp UnitPrice CosmosDB için bir Double veri türüne atamalısınız. Formülü şu şekilde ayarlayın: toDouble(round(UnitPrice,2)) .

  4. Başka bir türetilmiş sütun ekleyin ve bunu "MakeStruct" olarak çağırın. Burada, Ayrıntılar tablosundan değerleri tutmak için hiyerarşik bir yapı oluşturacağız. Ayrıntılar, üst bilgiyle bir M:1 ilişki olduğunu unutmayın. Yeni yapıyı adlandırın orderdetailsstruct ve hiyerarşiyi bu şekilde oluşturun, her bir alt sütunu gelen sütun adına ayarlar:

Yapı Oluştur

  1. Şimdi Sales Header kaynağına gidelim. Bir JOIN dönüştürmesi ekleyin. Sağ tarafta "MakeStruct" öğesini seçin. İç birleşime ayarlı bırakın ve SalesOrderID birleşim koşulunun her iki tarafında da seçim yapın.

  2. Sonuçlarınızı bu noktaya kadar görebileceğiniz şekilde, eklediğiniz yeni birleşimde veri önizleme sekmesine tıklayın. Ayrıntı satırlarıyla birleştirilmiş tüm başlık satırlarını görmeniz gerekir. Bu, öğesinden oluşturulan birleştirmenin sonucudur SalesOrderID . Daha sonra, ortak satırlardaki ayrıntıları Ayrıntılar yapısına birleştirecek ve ortak satırları toplayacağız.

Join

  1. Bu satırları normalleştirmeye yönelik dizileri oluşturabilmeniz için önce istenmeyen sütunları kaldırmalı ve veri değerlerinin CosmosDB veri türleriyle eşleştiğinden emin olmanız gerekir.

  2. Next bir SELECT dönüşümü ekleyin ve alan eşlemesini şuna benzer olacak şekilde ayarlayın:

Sütun temizleyici

  1. Şimdi bir para birimi sütununu bu kez bir daha dönüştürmeye izin verlim TotalDue . Adım 7 ' de yaptığımız gibi, formülü şu şekilde ayarlayın: toDouble(round(TotalDue,2)) .

  2. Bu noktada, ortak anahtara göre gruplandırma yaparak satırları normalleştirirsiniz SalesOrderID . Bir toplama dönüştürmesi ekleyin ve grubunu olarak ayarlayın SalesOrderID .

  3. Toplama formülünde, "details" adlı yeni bir sütun ekleyin ve daha önce oluşturduğumuz yapıda değerleri toplamak için bu formülü kullanın orderdetailsstruct : collect(orderdetailsstruct) .

  4. Toplama dönüştürmesi yalnızca, formüllerin yalnızca toplama veya gruplama kapsamında yer alan sütunları çıktı. Bu nedenle, satış başlığından sütunları da dahil etmemiz gerekir. Bunu yapmak için, aynı toplama dönüştürmesinde bir sütun stili ekleyin. Bu model çıktıda 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ı korumak ve first() işlevi bir toplama olarak kullanmak için diğer özelliklerde "This" söz dizimini kullanın:

Toplama

  1. Bir havuz dönüştürmesi ekleyerek geçiş akışını bitirebilmemiz için hazırız. DataSet ' in yanındaki "yeni" ye tıklayın ve CosmosDB veritabanınıza işaret eden CosmosDB veri kümesini ekleyin. Koleksiyon için, bunu "Orders" olarak çağıracağız ve bir şemaya sahip olmayacaktır ve bir belge anında oluşturulmayacak.

  2. havuz Ayarlar ' de, anahtarı \SalesOrderID ve toplama eylemini "yeniden oluştur" olarak bölümleyin. Eşleme sekmesinin şu şekilde göründüğünden emin olun:

Ekran görüntüsü eşleme sekmesini gösterir.

  1. Yeni kapsayıcıya yeni belge olarak eklemek üzere şu 32 satırları ayarladığınızdan emin olmak için veri önizleme ' ye tıklayın:

Ekran görüntüsü, veri önizleme sekmesini gösterir.

Her şey iyi görünüyorsa, artık yeni bir işlem hattı oluşturmaya hazır olursunuz, bu veri akışı etkinliğini bu işlem hattına ekleyin ve yürütün. Hata ayıklama veya tetiklenen bir çalıştırma aracılığıyla çalıştırabilirsiniz. Birkaç dakika sonra, CosmosDB veritabanınızda "Orders" adlı yeni bir eşit sipariş kapsayıcısına sahip olmanız gerekir.

Sonraki adımlar