Az átalakítás simítása a leképezési adatfolyamban

Vonatkozik: Azure Data Factory Azure Synapse Analytics

Tipp.

Data Factory a Microsoft Fabric a Azure Data Factory következő generációja, egyszerűbb architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik az adatintegrációval, kezdje a Fabric Data Factoryvel. A meglévő ADF-számítási feladatok frissíthetők Fabric használatával, hogy elérjék az adatkutatás, a valós idejű elemzés és a jelentéskészítés új képességeit.

Az adatfolyamok Azure Data Factory folyamatokban és Azure Synapse Analytics folyamatokban is elérhetők. Ez a cikk az adatfolyamok leképezésére vonatkozik. Ha még nem ismerkedik az átalakításokkal, tekintse meg az Adatok átalakítása leképezési adatfolyamokkal című bevezető cikket.

Tipp.

A 2. generációs adatfolyam egyenértékű átalakításával (oszlop kibontásával) kapcsolatban tekintse meg az Adatfolyam Gen2-nek az adatfolyam felhasználóinak leképezésére vonatkozó útmutatóját.

A flatten transzformáció használatával a hierarchikus struktúrákban, például a JSON-ban lévő tömbértékeket egyes sorokká lehet széthúzni. Ezt a folyamatot denormalizálásnak nevezzük.

Konfiguráció

A flattenelés átalakítás a következő konfigurációs beállításokat tartalmazza.

Az elsimított beállításokat bemutató képernyőkép.

Regisztráció törlése a következő szerint:

Válasszon ki egy tömböt a kibontáshoz. A kimeneti adatok minden tömbben elemenként egy sort tartalmaznak. Ha a bemeneti sor tömb szerinti kibontása null vagy üres, akkor van egy kimeneti sor, amelyben a kibontott értékek null értékűek. Lapítási transzformációnként több tömböt is kibonthat. A plusz (+) gombra kattintva több tömböt is belefoglalhat egyetlen simított átalakításba. Az ADF-adatfolyam metafüggvényeit itt használhatja, beleértve a name és type elemeket is, és mintaillesztést használhat az ezeknek a feltételeknek megfelelő tömbök kibontására. Ha több tömböt is beleszámít egyetlen lapított transzformációba, az eredmények az összes lehetséges tömbérték cartesian-szorzatai.

Az elsimított eredményeket megjelenítő képernyőkép.

Gyökér kibontása

Az elsimított átalakítás alapértelmezés szerint fel nem írja a tömböt annak a hierarchiának a tetejére, amelyben létezik. Választhatóan kiválaszthat egy tömböt kibontási gyökérként. A kibontási gyökérnek olyan összetett objektumok tömbjének kell lennie, amelyek maguk a kibontás szerint vannak, vagy tartalmazzák a kibontás szerinti tömböt. Ha egy kibontási gyökér van kiválasztva, a kimeneti adatok gyökérelemenként legalább egy sort tartalmaznak. Ha a bemeneti sor nem tartalmaz elemeket az unroll root területén, a program kihagyja a kimeneti adatokból. Egy kihajtási gyökér kiválasztása mindig kisebb vagy egyenlő számú sort eredményez, mint az alapértelmezett viselkedés.

Lesimított leképezés

A kiválasztási átalakításhoz hasonlóan válassza ki az új struktúra vetületét a bejövő mezőkből és a denormalizált tömbből. Ha denormalizált tömb van megfeleltetve, a kimeneti oszlop ugyanaz az adattípus, mint a tömb. Ha a tömb szerinti kibontás összetett objektumokból álló tömb, amely alárredéseket tartalmaz, a részhalmaz egy elemének leképezése tömböt eredményez.

A leképezési kimenet ellenőrzéséhez tekintse meg a vizsgálat lapot és az adatok előnézetét.

Szabályalapú leképezés

Az összesimított átalakítás támogatja a szabályalapú leképezést, így dinamikus és rugalmas átalakításokat hozhat létre, amelyek szabályokon alapuló tömböket és hierarchiaszinteken alapuló szerkezeteket simítanak.

Simított minta

Egyező feltétel

Adjon meg egy mintaegyeztetési feltételt azoknak az oszlopoknak vagy oszlopoknak, amelyeket pontos egyezéssel vagy mintákkal szeretne ellaposítani. Példa: like(name,'cust%')

Mélyoszlop bejárása

Nem kötelező beállítás, amely arra utasítja a szolgáltatást, hogy az összetett objektum összes almappáját önállóan kezelje ahelyett, hogy az összetett objektumot egész oszlopként kezelne.

Hierarchiaszint

Válassza ki a kibontani kívánt hierarchia szintjét.

Név egyezések (regex)

Ha szeretné, a névegyezést normál kifejezésként is kifejezheti ebben a mezőben a megfelelő feltétel használata helyett.

Példák

A lapított átalakítás alábbi példáiért tekintse meg a következő JSON-objektumot

{
  "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"}

Nincs szétbontás a sztringtömb tartalmazó gyökér esetében.

Regisztráció törlése a következő szerint: Gyökér kibontása Vetület
goods.customers Egyik sem név
ügyfél = áruk.ügyfél

Kimenet

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

Nincs gyökér kibontása összetett tömbbel

Regisztráció törlése a következő szerint: Gyökér kibontása Vetület
goods.orders.shipped.orderItems Egyik sem név
orderId = goods.orders.orderId
(Translation is not applied here as it is unnecessary and potentially harmful to alter code or variable names like these in a technical document.)
itemMennyiség = goods.orders.shipped.orderItems.itemMennyiség
location = helyszín

Kimenet

{ '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'}

Ugyanaz a gyökér, mint a tömb kicsomagolása.

Regisztráció törlése a következő szerint: Gyökér kibontása Vetület
áru.rendelések áru.rendelések név
goods.orders.shipped.orderItems.itemName
árucikkek.vásárlók
hely

Kimenet

{ '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'}

Gyökér kicsomagolása összetett tömbbel

Regisztráció törlése a következő szerint: Gyökér kibontása Vetület
áruk.rendelések.kiszállítva.rendelésiTétel áru.rendelések név
orderId = goods.orders.orderId
(Translation is not applied here as it is unnecessary and potentially harmful to alter code or variable names like these in a technical document.)
itemMennyiség = goods.orders.shipped.orderItems.itemMennyiség
location = helyszín

Kimenet

{ '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'}

Adatfolyamszkript

Szintaxis

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

Példa

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)