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:
Folyamat létrehozása
Új folyamat létrehozásához válassza az +Új folyamat lehetőséget.
Adatfolyam-tevékenység hozzáadása
Az adatfolyam-tevékenységben válassza az Új leképezési adatfolyam lehetőséget.
Ezt az adatfolyam-diagramot az alábbi módon fogjuk létrehozni
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.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.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))
.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átorderdetailsstruct
, és hozza létre a hierarchiát így, és állítsa az egyes almappákat a bejövő oszlop nevére: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.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.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.
Ezután adjon hozzá egy Kijelölés átalakítást, és állítsa a mezőleképezést a következőképpen:
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))
.Itt fogjuk denormalizálni a sorokat a közös kulcs
SalesOrderID
szerinti csoportosítással. Adjon hozzá egy összesítési átalakítást, és állítsa be a csoportot a következőreSalesOrderID
: .Az összesítő képletben adjon hozzá egy "részletek" nevű új oszlopot, és ezzel a képlettel gyűjtse össze a korábban
orderdetailsstruct
létrehozott szerkezet értékeit:collect(orderdetailsstruct)
.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
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: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.
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: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:
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.
Kapcsolódó tartalom
- Az adatfolyam-átalakítások leképezésével hozza létre a többi adatfolyam-logikát.
- Töltse le az oktatóanyaghoz tartozó kész folyamatsablont , és importálja a sablont a gyárba.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: