Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tato příručka vysvětluje, jak vzít existující normalizované schéma databáze ve službě Azure SQL Database a převést ho na denormalizované schéma služby Azure Cosmos DB pro načtení do služby Azure Cosmos DB.
Schémata SQL se obvykle modelují pomocí třetího normálního formátu, což vede k normalizovaným schématům, která poskytují vysokou úroveň integrity dat a méně duplicitních hodnot dat. Dotazy můžou spojit entity mezi tabulkami pro čtení. Azure Cosmos DB je optimalizovaná pro super-rychlé transakce a dotazování v rámci kolekce nebo kontejneru prostřednictvím denormalizovaných schémat s daty obsaženými v dokumentu.
Pomocí služby Azure Data Factory vytvoříme datový kanál, který používá Tok dat pro mapování ke čtení ze dvou normalizovaných tabulek Azure SQL Database, jež obsahují primární a cizí klíče jako vztah mezi entitami. Datová továrna tyto tabulky spojí do jednoho datového proudu pomocí modulu Spark toku dat, shromáždí spojené řádky do polí a vytvoří jednotlivé vyčištěné dokumenty pro vložení do nového kontejneru Azure Cosmos DB.
Tato příručka vytvoří za pochodu nový kontejner s názvem "orders", který bude používat SalesOrderHeader
a SalesOrderDetail
tabulky ze standardní Adventure Works ukázková databáze SQL Server. Tyto tabulky představují prodejní transakce spojené SalesOrderID
. Každý jedinečný záznam podrobností má svůj vlastní primární klíč SalesOrderDetailID
. Vztah mezi záhlavím a podrobnostmi je 1:M
. Připojíme SalesOrderID
v ADF a potom jednotlivé související záznamy zahrneme do pole nazvaného "detail".
Reprezentativní dotaz SQL pro tuto příručku:
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;
Výsledný kontejner Azure Cosmos DB vloží vnitřní dotaz do jednoho dokumentu a vypadá takto:
Vytvořit pipelinu
Vyberte +Nový kanál a vytvořte nový kanál.
Přidání aktivity toku dat
V aktivitě toku dat vyberte Nový datový tok mapování.
Tento graf toku dat vytvoříme:
Definujte zdroj pro SourceOrderDetails. Pro datovou sadu vytvořte novou datovou sadu Azure SQL Database, která odkazuje na
SalesOrderDetail
tabulku.Definujte zdroj pro SourceOrderHeader. Pro datovou sadu vytvořte novou datovou sadu Azure SQL Database, která odkazuje na
SalesOrderHeader
tabulku.Do horního zdroje přidejte transformaci odvozeného sloupce za SourceOrderDetails. Nazvěte novou transformaci "TypeCast". Potřebujeme zaokrouhlit sloupec
UnitPrice
a převést ho na datový typ `double` pro Azure Cosmos DB. Nastavte vzorec na:toDouble(round(UnitPrice,2))
.Přidejte další odvozený sloupec a nazvěte ho „MakeStruct“. Tady vytvoříme hierarchickou strukturu, která bude obsahovat hodnoty z tabulky podrobností. Mějte na paměti, že podrobnosti jsou vztahem
M:1
k záhlaví. Pojmenujte novou strukturuorderdetailsstruct
a vytvořte hierarchii tímto způsobem a nastavujte jednotlivé podsloupce na název příchozího sloupce:Teď přejdeme ke zdroji prodejní hlavičky. Přidejte transformační spojení. Na pravé straně vyberte "MakeStruct". Ponechte ji nastavenou na vnitřní spojení a zvolte
SalesOrderID
pro obě strany podmínky spojení.V novém spojení, které jste přidali, vyberte kartu Náhled dat, abyste viděli výsledky až do tohoto okamžiku. Měly by se zobrazit všechny řádky záhlaví spojené s řádky podrobností. To je výsledek spojení, které je vytvořeno z
SalesOrderID
. V dalším kroku zkombinujeme podrobnosti z běžných řádků do struktury podrobností a agregujeme společné řádky.Než začneme vytvářet pole pro denormalizaci těchto řádků, musíme nejprve odebrat nežádoucí sloupce a zajistit, aby hodnoty dat odpovídaly datovým typům Azure Cosmos DB.
Přidejte další transformaci Select a nastavte mapování polí tak, aby vypadalo takto:
Teď znovu přetypujme sloupec měny, tentokrát
TotalDue
. Stejně jako jsme to udělali výše v kroku 7, nastavte vzorec na:toDouble(round(TotalDue,2))
.Tady je místo, kde denormalizujeme řádky seskupením podle společného klíče
SalesOrderID
. Přidejte agregační transformaci a nastavte skupinu naSalesOrderID
hodnotu .V agregačním vzorci přidejte nový sloupec s názvem "podrobnosti" a pomocí tohoto vzorce shromážděte hodnoty ve struktuře, kterou jsme vytvořili dříve s názvem
orderdetailsstruct
:collect(orderdetailsstruct)
.Agregační transformace bude mít pouze výstupní sloupce, které jsou součástí agregačních nebo seskupovacích vzorců. Proto musíme zahrnout i sloupce z prodejní hlavičky. Uděláte to tak, že do stejné agregační transformace přidáte vzor sloupce. Tento vzor zahrnuje všechny ostatní sloupce ve výstupu s výjimkou sloupců uvedených níže (OrderQty, UnitPrice, SalesOrderID):
instr(name,'OrderQty')==0&&instr(name,'UnitPrice')==0&&instr(name,'SalesOrderID')==0
V ostatních vlastnostech použijte syntaxi "this" ($$), abychom zachovali stejné názvy sloupců a funkci použili
first()
jako agregaci. To dává ADF pokyn, aby zachoval první nalezenou odpovídající hodnotu:Jsme připraveni dokončit tok migrace přidáním transformace jímky. Vyberte "nový" vedle datové sady a přidejte datovou sadu Azure Cosmos DB, která odkazuje na databázi Azure Cosmos DB. Pro kolekci tomu říkáme "orders" a nemá žádné schéma a žádné dokumenty, protože se vytvoří za pochodu.
V nastavení úložiště nastavte klíč oddílu na
/SalesOrderID
a akci kolekce na "znovu vytvořit". Ujistěte se, že karta mapování vypadá takto:Výběrem náhledu dat se ujistěte, že se tyto 32 řádky nastaví tak, aby se do nového kontejneru vkládaly jako nové dokumenty:
Pokud všechno vypadá dobře, jste teď připraveni vytvořit nový kanál, přidat tuto aktivitu toku dat do tohoto kanálu a spustit ji. Spuštění můžete provést z ladění nebo aktivovaného spuštění. Po několika minutách byste měli mít v databázi Azure Cosmos DB nový denormalizovaný kontejner objednávek s názvem "orders".
Související obsah
- Sestavte zbytek logiky toku dat pomocí transformací mapování toků dat.
- Stáhněte si dokončenou šablonu datového toku pro tento kurz a importujte ji do vaší továrny.