Zploštěná transformace v mapování toku dat

VZTAHUJE SE NA: Azure Data Factory Azure Synapse Analytics

Toky dat jsou k dispozici v kanálech Azure Data Factory i v kanálech Azure Synapse Analytics. Tento článek se týká mapování toků dat. Pokud s transformacemi začínáte, přečtěte si úvodní článek Transformace dat pomocí mapování toků dat.

Tip

Ekvivalentní transformaci (rozbalení sloupce) v Dataflow Gen2 najdete v průvodci Dataflow Gen2 pro uživatele mapování toků dat.

Pomocí transformace flatten můžete vzít hodnoty polí, jako je JSON, uvnitř hierarchických struktur a rozbalit je do jednotlivých řádků. Tento proces se označuje jako denormalizace.

Konfigurace

Transformace flatten obsahuje následující nastavení konfigurace.

Snímek obrazovky znázorňující nastavení zploštění

Rozbalit pomocí

Vyberte pole, které chcete rozbalit. Výstupní data mají jeden řádek pro každou položku v každém poli. Pokud je rozbalení podle pole ve vstupním řádku null nebo prázdný, existuje jeden výstupní řádek s rozbalenými hodnotami jako null. Při transformaci typu Flatten můžete rozbalit více než jedno pole. Výběrem tlačítka plus (+) zahrnete více polí do jedné transformace typu Narrow. Tady můžete použít meta funkce toku dat ADF, včetně name a type, a použít porovnávání vzorů k rozbalení polí, která odpovídají těmto kritériím. Při zahrnutí více polí do jedné zploštěné transformace jsou výsledky kartézským součinem všech možných maticových hodnot.

Snímek obrazovky znázorňující zploštěné výsledky

Rozbalit kořen

Ve výchozím nastavení transformace zploštění uvolní pole na nejvyšší úroveň hierarchie, ve které se nachází. Volitelně můžete vybrat pole jako váš kořen rozbalení. Kořen rozvinutí musí být pole složitých objektů, které buď samo o sobě je nebo obsahuje rozvinutí podle pole. Pokud je vybrána možnost zrušit registraci kořenového adresáře, výstupní data obsahují alespoň jeden řádek na položky v kořenovém adresáři zrušení registrace. Pokud vstupní řádek neobsahuje žádné položky v kořenovém adresáři pro zrušení registrace, dojde k jeho vyřazení z výstupních dat. Výběr zrušení registrace kořenového adresáře vždy vypíše menší nebo stejný počet řádků než výchozí chování.

Zploštěné mapování

Podobně jako u vybrané transformace zvolte projekci nové struktury z příchozích polí a denormalizovaného pole. Pokud je mapováno denormalizované pole, je výstupní sloupec stejný datový typ jako pole. Pokud je rozvinutí podle pole pole komplexních objektů, které obsahují podpola, pak mapování položky tohoto podpola vrátí pole.

Pokud chcete ověřit výstup mapování, podívejte se na kartu Kontroly a náhled dat.

Mapování založené na pravidlech

Transformace zploštěním podporuje mapování založené na pravidlech, které umožňuje vytvářet dynamické a flexibilní transformace, které zplošťují pole na základě pravidel a struktury na základě úrovní hierarchie.

Zploštěný vzor

Podmínka shody

Zadejte podmínku porovnávání vzorů pro sloupec nebo sloupce, které chcete zploštět pomocí přesné shody nebo vzorů. Příklad: like(name,'cust%')

Hloubková procházení sloupců

Volitelné nastavení, které službě říká, aby zpracovávala všechny dílčí sloupce komplexního objektu jednotlivě místo zpracování komplexního objektu jako celého sloupce.

Úroveň hierarchie

Zvolte úroveň hierarchie, kterou chcete rozbalit.

Shoda názvů (regulární výraz)

Volitelně můžete místo použití odpovídající podmínky uvést své jméno jako regulární výraz v tomto poli.

Příklady

Následující příklady zploštěné transformace najdete v následujícím objektu JSON.

{
  "name":"MSFT","location":"Redmond", "satellites": ["Bay Area", "Shanghai"],
  "goods": {
    "trade":true, "customers":["government", "distributer", "retail"],
    "orders":[
        {"orderId":1,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":2}]}},
        {"orderId":2,"orderTotal":323.34,"shipped":{"orderItems":[{"itemName":"Mice","itemQty":2},{"itemName":"Keyboard","itemQty":1}]}}
    ]}}
{"name":"Company1","location":"Seattle", "satellites": ["New York"],
  "goods":{"trade":false, "customers":["store1", "store2"],
  "orders":[
      {"orderId":4,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":3}]}},
      {"orderId":5,"orderTotal":343.24,"shipped":{"orderItems":[{"itemName":"Chair","itemQty":4},{"itemName":"Lamp","itemQty":2}]}}
    ]}}
{"name": "Company2", "location": "Bellevue",
  "goods": {"trade": true, "customers":["Bank"], "orders": [{"orderId": 4, "orderTotal": 123.34}]}}
{"name": "Company3", "location": "Kirkland"}

Bez rozvinutí kořene s polem řetězců

Rozbalit pomocí Rozbalit kořen Projekce
zboží.zákazníci Nic Jméno
zákazník = zboží.zákazník

Výstup

{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}

Neukončujte odvíjení kořene s komplexním polem

Rozbalit pomocí Rozbalit kořen Projekce
zboží.objednávky.odesláno.položky_objednávky Nic Jméno
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.názevPoložky
itemQty = zboží.objednávky.odesláno.orderItems.itemQty
location = umístění

Výstup

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}
{ 'Company3', null, null, null, 'Kirkland'}

Stejný základ jako rozbalení pole

Rozbalit pomocí Rozbalit kořen Projekce
objednávky zboží objednávky zboží Jméno
goods.orders.shipped.orderItems.itemName
zbozi.zakaznici
poloha

Výstup

{ 'MSFT', ['Laptop','Charger'], ['government','distributer','retail'], 'Redmond'}
{ 'MSFT', ['Mice', 'Keyboard'], ['government','distributer','retail'], 'Redmond'}
{ 'Company1', ['Laptop','Charger'], ['store', 'store2'], 'Seattle'}
{ 'Company1', ['Chair', 'Lamp'], ['store', 'store2'], 'Seattle'}
{ 'Company2', null, ['Bank'], 'Bellevue'}

Rozbalit kořen pomocí komplexního pole

Rozbalit pomocí Rozbalit kořen Projekce
zboží.objednávky.odeslané.objednanáPoložka objednávky zboží Jméno
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.názevPoložky
itemQty = zboží.objednávky.odesláno.orderItems.itemQty
location = umístění

Výstup

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}

Skript toku dat

Syntaxe

<incomingStream>
foldDown(unroll(<unroll cols>),
    mapColumn(
        name,
        each(<array>(type == '<arrayDataType>')),
        each(<array>, match(true())),
        location
    )) ~> <transformationName>

Příklad

source foldDown(unroll(goods.orders.shipped.orderItems, goods.orders),
    mapColumn(
        name,
        orderId = goods.orders.orderId,
        itemName = goods.orders.shipped.orderItems.itemName,
        itemQty = goods.orders.shipped.orderItems.itemQty,
        location = location
    ),
    skipDuplicateMapInputs: false,
    skipDuplicateMapOutputs: false)