Vlakke transformatie in gegevensstromen in mapping

Van toepassing op: Azure Data Factory Azure Synapse Analytics

Tip

Data Factory in Microsoft Fabric is de volgende generatie van Azure Data Factory, met een eenvoudigere architectuur, ingebouwde AI en nieuwe functies. Als u nieuw bent in gegevensintegratie, begint u met Fabric Data Factory. Bestaande ADF-workloads kunnen upgraden naar Fabric om toegang te krijgen tot nieuwe mogelijkheden voor gegevenswetenschap, realtime analyses en rapportage.

Gegevensstromen zijn beschikbaar in zowel Azure Data Factory pijplijnen als Azure Synapse Analytics pijplijnen. Dit artikel is van toepassing op gegevensverwerkingsstromen. Als u nieuw bent met transformaties, raadpleegt u het inleidende artikel Gegevens transformeren met behulp van mapping-dataflows.

Tip

Zie voor de equivalente transformatie (Kolom Uitvouwen) in Dataflow Gen2 Een handleiding voor Gegevensstroom Gen2 voor het toewijzen van gegevensstroomgebruikers.

Gebruik de platgemaakte transformatie om matrixwaarden in hiërarchische structuren zoals JSON te nemen en ze uit te schrijven in afzonderlijke rijen. Dit proces wordt denormalisatie genoemd.

Configuratie

De platgemaakte transformatie bevat de volgende configuratie-instellingen.

Schermopname van platgemaakte instellingen.

Uitrollen door

Selecteer een array die u wilt uitschrijven. De uitvoergegevens hebben één rij per item in elke matrix. Als de ontrollen door matrix in de invoerrij null of leeg is, is er één uitvoerrij met ontrollen waarden als null. U kunt meer dan één array uitvouwen per Flatten-transformatie. Selecteer de plusknop (+) om meerdere matrices op te nemen in één platte transformatie. U kunt hier meta-functies voor ADF-gegevensstromen gebruiken, inclusief name en type, en patroonmatching gebruiken om arrays uit te rollen die aan deze criteria voldoen. Wanneer u meerdere matrices in één platte transformatie optelt, zijn uw resultaten een cartesisch product van alle mogelijke matrixwaarden.

Schermopname met afgevlakte resultaten.

Root uitvouwen

Standaard rolt de afvlakte transformatie een array uit naar de bovenkant van de hiërarchie waarin het zich bevindt. U kunt desgewenst een matrix selecteren als uw ontvouwwortel. De unroll root moet een array zijn van complexe objecten die ofwel zelf de unroll door array is, of deze bevat. Als er een uitvouwhoofdelement is geselecteerd, bevatten de uitvoergegevens ten minste één rij per item. Als de invoerrij geen items in de hoofdmotor voor uitvouwen bevat, wordt deze verwijderd uit de uitvoergegevens. Bij het kiezen van een unroll-root wordt altijd een kleiner dan of gelijk aantal rijen geproduceerd dan bij het standaardgedrag.

Platgemaakte toewijzing

Net als bij de selectietransformatie kiest u de projectie van de nieuwe structuur uit binnenkomende velden en de gedenormaliseerde matrix. Als een gedenormaliseerde array is gemapt, is de uitvoerkolom van hetzelfde datatype als de array. Als het uitvouwen op basis van een array een array is van complexe objecten die subarrays bevat, zorgt het toewijzen van een item van die subarray voor een array.

Raadpleeg het tabblad Inspecteren en het gegevensvoorbeeld om uw toewijzingsuitvoer te controleren.

toewijzing op basis van regels

De platte transformatie ondersteunt toewijzing op basis van regels, zodat u dynamische en flexibele transformaties kunt maken waarmee matrices worden afgevlakt op basis van regels en platte structuren op basis van hiërarchieniveaus.

Afgevlakt patroon

Overeenkomende voorwaarde

Voer een patroonkoppelingsvoorwaarde in voor de kolom of kolommen die u wilt platmaken met behulp van exacte overeenkomsten of patronen. Voorbeeld: like(name,'cust%')

Doorlopen van diepe kolommen

Optionele instelling waarmee de service alle subkolommen van een complex object afzonderlijk moet verwerken in plaats van het complexe object als een hele kolom te verwerken.

Hiërarchieniveau

Kies het niveau van de hiërarchie dat u wilt uitbreiden.

Naamovereenkomsten (regex)

U kunt ervoor kiezen om uw naamvergelijking als een reguliere expressie in dit vak te uitdrukken, in plaats van de overeenkomende voorwaarde te gebruiken.

Voorbeelden

Raadpleeg het volgende JSON-object voor de onderstaande voorbeelden van de platte transformatie

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

Geen unroll van rootmap met tekenreeks array

Uitrollen door Root uitvouwen Projectie
goederen.klanten Geen naam
klant = goods.customer

Uitvoer

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

Geen uitrollen van root met complexe array

Uitrollen door Root uitvouwen Projectie
goederen.bestellingen.verzonden.bestelartikelen Geen naam
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = locatie

Uitvoer

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

Dezelfde wortel als het uitrollen van array

Uitrollen door Root uitvouwen Projectie
goederen.bestellingen goederen.bestellingen naam
goods.orders.shipped.orderItems.itemName
goods.customers
locatie

Uitvoer

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

De wortel uitvouwen met complexe array

Uitrollen door Root uitvouwen Projectie
goederen.bestellingen.verzonden.bestellingItem goederen.bestellingen naam
orderId = goods.orders.orderId
itemNaam = goederen.bestellingen.verzonden.bestelItems.itemNaam
itemQty = goods.orders.shipped.orderItems.itemQty
location = locatie

Uitvoer

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

Script voor gegevensstroom

Syntaxis

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

Voorbeeld

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)