Dela via


Platta ut transformering i dataflödesmappning

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

Dricks

Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!

Dataflöden är tillgängliga både i Azure Data Factory och Azure Synapse Pipelines. Den här artikeln gäller för mappning av dataflöden. Om du är nybörjare på transformeringar kan du läsa den inledande artikeln Transformera data med hjälp av ett mappningsdataflöde.

Använd utplattad transformering för att ta matrisvärden inuti hierarkiska strukturer som JSON och avregistrera dem i enskilda rader. Den här processen kallas avnormalisering.

Konfiguration

Transformering av platta innehåller följande konfigurationsinställningar.

Skärmbild som visar inställningarna för platta ut.

Avregistrera efter

Välj en matris som ska avregistreras. Utdata har en rad per objekt i varje matris. Om avregistreringen av matrisen i indataraden är null eller tom, kommer det att finnas en utdatarad med oregistrerade värden som null. Du har möjlighet att avregistrera mer än en matris per utplattad transformering. Klicka på plusknappen (+) om du vill inkludera flera matriser i en enda Platta transformering. Du kan använda ADF-dataflödesmetafunktioner här, inklusive name och type använda mönstermatchning för att avregistrera matriser som matchar dessa villkor. När du inkluderar flera matriser i en enskild Platta-transformering blir resultatet en kartesisk produkt av alla möjliga matrisvärden.

Skärmbild som visar utplattade resultat.

Avregistrera rot

Som standard avregistrerar utplattad transformering en matris överst i hierarkin som den finns i. Du kan också välja en matris som din avregistrerade rot. Avregistreringsroten måste vara en matris med komplexa objekt som antingen är eller innehåller avregistreringen per matris. Om en avregistrerad rot har valts innehåller utdata minst en rad per objekt i avregistreringsroten. Om indataraden inte har några objekt i avregistreringsroten tas den bort från utdata. Om du väljer en avregistrerad rot matas alltid ut ett mindre än eller lika stort antal rader än standardbeteendet.

Platta ut mappning

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 blir utdatakolumnen samma datatyp som matrisen. Om avregistreringen efter matris är en matris med komplexa objekt som innehåller underarrayer, kommer mappning av ett objekt i underariet att mata ut en matris.

Kontrollera mappningsutdata genom att gå till fliken Granska och förhandsgranska data.

Regelbaserad mappning

Transformering av platta stöder regelbaserad mappning så att du kan skapa dynamiska och flexibla transformeringar som jämnar ut matriser baserat på regler och platta ut 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 kolumnbläddering

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 också välja att uttrycka ditt namn som ett reguljärt uttryck i den här rutan i stället för att använda matchande villkor ovan.

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 avregistrera rot med strängmatris

Avregistrera efter Avregistrera rot Projektion
goods.customers Ingen Namn
customer = goods.customer

Output

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

Ingen avregistrera rot med komplex matris

Avregistrera efter Avregistrera rot Projektion
goods.orders.shipped.orderItems Ingen Namn
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = location

Output

{ '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 avregistrera matris

Avregistrera efter Avregistrera rot Projektion
goods.orders goods.orders Namn
goods.orders.shipped.orderItems.itemName
goods.customers
plats

Output

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

Avregistrera rot med komplex matris

Avregistrera efter Avregistrera rot Projektion
goods.orders.shipped.orderItem goods.orders Namn
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = location

Output

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