Platta ut transformering i dataflödesmappning

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

Tips

Data Factory i Microsoft Fabric är nästa generations Azure Data Factory, med en enklare arkitektur, inbyggd AI och nya funktioner. Om dataintegrering är nytt för dig börjar du med Fabric Data Factory. Befintliga ADF-arbetsbelastningar kan uppgraderas till Fabric för att få åtkomst till nya funktioner inom datavetenskap, realtidsanalys och rapportering.

Dataflöden är tillgängliga i både Azure Data Factory pipelines och Azure Synapse Analytics pipelines. Den här artikeln gäller för mappning av dataflöden. Om du inte har använt transformeringar tidigare läser du introduktionsartikeln Transformera data med hjälp av mappning av dataflöden.

Tips

För motsvarande transformering (expandera kolumn) i Dataflöde Gen2, se En guide till Dataflöde Gen2 för mappning av dataflödesanvändare.

Använd utjämningstransformation för att ta matrisvärden inuti hierarkiska strukturer som JSON och rulla ut dem till enskilda rader. Den här processen kallas avnormalisering.

Konfiguration

Utplattningstransformeringen innehåller följande konfigurationer.

Skärmbild som visar inställningarna för utjämning.

Avregistrera dig genom

Välj en matris att avveckla. Utdata har en rad per objekt i varje matris. Om avregistreringen efter matris i indataraden är null eller tom finns det en utdatarad med oregistrerade värden som null. Du kan rulla ut fler än en matris per avplattningstransformering. Välj plusknappen (+) för att inkludera flera matriser i en enda utplattningstransformation. Du kan använda ADF-dataflödesmetafunktioner här, inklusive name och type och använda mönstermatchning för att avveckla matriser som matchar dessa villkor. När du inkluderar flera matriser i en enskild Platta-transformering är dina resultat en kartesisk produkt av alla möjliga matrisvärden.

Skärmbild som visar utplattade resultat.

Avveckla rot

Som standard rullar plattningstransformeringen ut en matris till den högsta nivån i hierarkin där den finns. Du kan valfritt välja en matris som din rot för avveckling. Avregistreringsroten måste vara en matris med komplexa objekt som antingen är eller innehåller avregistreringen per matris. Om en avregistreringsrot har valts innehåller utdata minst en rad per objekt i avregistreringsroten. Om indataraden inte har några objekt i utrullningsroten tas den bort från utdata. Om du väljer en uppackningsrot resulterar det alltid i ett lika med eller färre antal rader än standardbeteendets resultat.

Förenkla kartläggning

I likhet med den valda omvandlingen väljer du projektionen av den nya strukturen från inkommande fält och den avnormaliserade matrisen. Om en avnormaliserad matris mappas är utdatakolumnen samma datatyp som matrisen. Om utvecklingen av en array är en array med komplexa objekt som innehåller undermatriser, resulterar en mappning av ett objekt i den undermatrisen i en array.

Gå till fliken Inspektera och förhandsgranska data för att verifiera ditt mappningsresultat.

Regelbaserad mappning

Flatten-transformation stöder regelbaserad mappning som gör att du kan skapa dynamiska och flexibla transformationer som platta ut matriser baserat på regler och flatten-strukturer baserat på hierarkinivåer.

Platta ut mönster

Matchande villkor

Ange ett mönstermatchningsvillkor för kolumnen eller kolumnerna som du vill platta ut med antingen exakt matchning eller mönster. Exempel: like(name,'cust%')

Djup kolumngenomsökning

Valfri inställning som instruerar tjänsten att hantera alla underkolumner för ett komplext objekt individuellt i stället för att hantera det komplexa objektet som en hel kolumn.

Hierarkinivå

Välj den nivå i hierarkin som du vill expandera.

Namnmatchningar (regex)

Du kan välja att uttrycka matchningen av ditt namn som ett reguljärt uttryck i den här rutan, i stället för att använda matchande villkor.

Exempel

Se följande JSON-objekt för nedanstående exempel på utplattad transformering

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

Ingen avveckling av rot med strängarray

Avregistrera dig genom Avveckla rot Projektion
varor.kunder Ingen Namn
kund = varor.kund

Utdata

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

Ingen utveckling av rot med komplex matris

Avregistrera dig genom Avveckla rot Projektion
varor.beställningar.levererade.orderartiklar Ingen Namn
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = plats

Utdata

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

Samma rot som avveckla matris

Avregistrera dig genom Avveckla rot Projektion
varor.beställningar varor.beställningar Namn
varor.orders.skeppade.beställningsobjekt.objektnamn
goods.customers
plats

Utdata

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

Avveckla rot med komplex array

Avregistrera dig genom Avveckla rot Projektion
varor.beställningar.skeppade.beställningsvara varor.beställningar Namn
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = plats

Utdata

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

Dataflödesskript

Syntax

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

Exempel

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) 
  • Använd pivottransformeringen för att pivotleda rader till kolumner.
  • Använd Unpivot-omvandlingen för att pivotleda kolumner till rader.