Megosztás a következőn keresztül:


Normalizált adatbázisséma migrálása az Azure SQL Database-ből az Azure Cosmos DB denormalizált tárolóba

Ez az útmutató bemutatja, hogyan hozhat létre egy meglévő normalizált adatbázissémát az Azure SQL Database-ben, és hogyan alakíthatja át egy Azure Cosmos DB denormalizált sémává az Azure Cosmos DB-be való betöltéshez.

Az SQL-sémákat általában harmadik normál formában modellezik, ami normalizált sémákat eredményez, amelyek magas szintű adatintegritást és kevesebb duplikált adatértéket biztosítanak. A lekérdezések össze tudják illeszteni az entitásokat a táblák között olvasás céljából. Az Azure Cosmos DB szuper gyors tranzakciókra van optimalizálva, és denormalizált sémákon keresztül lekérdezést hajthat létre egy gyűjteményben vagy tárolóban, és a dokumentumon belül önállóan tárolt adatokkal.

Az Azure Data Factory használatával létrehozunk egy folyamatot, amely egyetlen leképezési Adatfolyam használ két olyan normalizált Azure SQL Database-táblából, amelyek elsődleges és idegen kulcsokat tartalmaznak entitáskapcsolatként. Az ADF ezeket a táblákat egyetlen adatfolyamba fogja illeszteni az adatfolyam Spark-motorjának használatával, tömbökbe gyűjti az összekapcsolt sorokat, és egyedi tisztított dokumentumokat hoz létre egy új Azure Cosmos DB-tárolóba való beszúráshoz.

Ez az útmutató menet közben létrehoz egy új tárolót ,,rendelések" néven, amely a SalesOrderHeader standard SQL Server Adventure Works mintaadatbázisból származó táblákat SalesOrderDetail és táblákat fogja használni. Ezek a táblák a hozzájuk csatlakoztatott SalesOrderIDértékesítési tranzakciókat jelölik. Minden egyedi részletrekord saját elsődleges kulcsával rendelkezik SalesOrderDetailID. A fejléc és a részlet közötti kapcsolat a következő 1:M: . Csatlakozunk az SalesOrderID ADF-hez, majd minden kapcsolódó részletrekordot egy "detail" nevű tömbbe gördítünk.

Az útmutató reprezentatív SQL-lekérdezése a következő:

  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;

Az eredményül kapott Azure Cosmos DB-tároló egyetlen dokumentumba ágyazza be a belső lekérdezést, és így néz ki:

Collection

Folyamat létrehozása

  1. Új folyamat létrehozásához válassza az +Új folyamat lehetőséget.

  2. Adatfolyam-tevékenység hozzáadása

  3. Az adatfolyam-tevékenységben válassza az Új leképezési adatfolyam lehetőséget.

  4. Ezt az adatfolyam-diagramot az alábbi módon fogjuk létrehozni

    Data Flow Graph

  5. Adja meg a "SourceOrderDetails" forrását. Adathalmaz esetén hozzon létre egy új Azure SQL Database-adatkészletet, amely a SalesOrderDetail táblára mutat.

  6. Adja meg a "SourceOrderHeader" forrását. Adathalmaz esetén hozzon létre egy új Azure SQL Database-adatkészletet, amely a SalesOrderHeader táblára mutat.

  7. A felső forrásban adjon hozzá egy származtatott oszlopátalakítást a "SourceOrderDetails" után. Hívja meg az új átalakítást "TypeCast" néven. Le kell kerekíteni az UnitPrice oszlopot, és az Azure Cosmos DB-hez kettős adattípusra kell vetnünk. A képlet beállítása a következőre: toDouble(round(UnitPrice,2)).

  8. Adjon hozzá egy másik származtatott oszlopot, és hívja "MakeStruct" néven. Itt hozunk létre egy hierarchikus struktúrát, amely a részletek táblából származó értékeket tárolja. Ne feledje, hogy a részletek a M:1 fejléchez való viszonyt használják. Nevezze el az új struktúrát orderdetailsstruct , és hozza létre a hierarchiát így, és állítsa az egyes almappákat a bejövő oszlop nevére:

    Create Structure

  9. Most nézzük meg az értékesítési fejléc forrását. Csatlakozás átalakítás hozzáadása. A jobb oldalon válassza a "MakeStruct" lehetőséget. Hagyja meg a belső illesztés beállítását, és válassza SalesOrderID az illesztés feltételének mindkét oldalát.

  10. Kattintson a hozzáadott új illesztés Adatelőnézet lapjára, hogy eddig a pontig láthassa az eredményeket. Látnia kell az összes fejlécsort a részletes sorokkal összekapcsolva. Ez annak az eredménye, hogy az illesztés a SalesOrderID. A következő lépésben a közös sorok adatait egyesítjük a részletes szerkezetbe, és összesítjük a közös sorokat.

    Join

  11. Mielőtt létrehozhatnánk a tömböket ezeknek a soroknak a denormalizálásához, először el kell távolítanunk a nem kívánt oszlopokat, és meg kell győződnünk arról, hogy az adatértékek megfelelnek az Azure Cosmos DB adattípusainak.

  12. Ezután adjon hozzá egy Kijelölés átalakítást, és állítsa a mezőleképezést a következőképpen:

    Column scrubber

  13. Most most ismét adjon meg egy pénznemoszlopot, ezúttal TotalDue. A 7. lépésben leírtakhoz hasonlóan állítsa a képletet a következőre: toDouble(round(TotalDue,2)).

  14. Itt fogjuk denormalizálni a sorokat a közös kulcs SalesOrderIDszerinti csoportosítással. Adjon hozzá egy összesítési átalakítást, és állítsa be a csoportot a következőre SalesOrderID: .

  15. Az összesítő képletben adjon hozzá egy "részletek" nevű új oszlopot, és ezzel a képlettel gyűjtse össze a korábban orderdetailsstructlétrehozott szerkezet értékeit: collect(orderdetailsstruct).

  16. Az összesítési átalakítás csak az összesítés részét képező vagy képletek szerint csoportosított oszlopokat jeleníti meg. Ezért az értékesítési fejléc oszlopait is bele kell foglalnunk. Ehhez adjon hozzá egy oszlopmintát ugyanabban az összesített átalakításban. Ez a minta az összes többi oszlopot is tartalmazza a kimenetben, kivéve az alábbi oszlopokat (OrderQty, UnitPrice, SalesOrderID):

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

  1. Használja az "ez" szintaxist ($$) a többi tulajdonságban, hogy ugyanazokat az oszlopneveket megőrizzük, és a first() függvényt összesítésként használjuk. Ez azt jelzi az ADF-nek, hogy tartsa meg az első egyező értéket:

    Aggregate

  2. Készen állunk a migrálási folyamat befejezésére fogadóátalakítás hozzáadásával. Kattintson az adathalmaz melletti "új" elemre, és adjon hozzá egy Azure Cosmos DB-adatkészletet, amely az Azure Cosmos DB-adatbázisra mutat. A gyűjtemény esetében "rendelésnek" hívjuk, és nem lesz sémája és dokumentumai, mert menet közben létrejön.

  3. A Fogadó Gépház a partíciókulcs és a /SalesOrderID gyűjtemény művelet "újbóli létrehozása" gombra. Győződjön meg arról, hogy a leképezési lap a következőhöz hasonlóan néz ki:

    Screenshot shows the Mapping tab.

  4. Az adatok előnézetére kattintva győződjön meg arról, hogy a 32 sor új dokumentumként beszúrható az új tárolóba:

    Screenshot shows the Data preview tab.

Ha minden jól néz ki, most már készen áll egy új folyamat létrehozására, adja hozzá ezt az adatfolyam-tevékenységet a folyamathoz, és hajtsa végre. Futtatható hibakeresésből vagy aktivált futtatásból. Néhány perc múlva az Azure Cosmos DB-adatbázisban egy "orders" nevű új denormalizált rendeléstárolóval kell rendelkeznie.