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.
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.
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.
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)