Share via


Platte transformatie in toewijzingsgegevensstroom

VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics

Tip

Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .

Gegevensstromen zijn beschikbaar in Zowel Azure Data Factory als Azure Synapse Pipelines. Dit artikel is van toepassing op toewijzingsgegevensstromen. Als u geen ervaring hebt met transformaties, raadpleegt u het inleidende artikel Gegevens transformeren met behulp van een toewijzingsgegevensstroom.

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.

Screenshot that shows flatten settings.

Uitschrijven door

Selecteer een matrix die u wilt uitschrijven. De uitvoergegevens hebben één rij per item in elke matrix. Als de uitschrijving per matrix in de invoerrij null of leeg is, is er één uitvoerrij met niet-ingeschreven waarden als null. U hebt de mogelijkheid om meer dan één matrix per platte transformatie uit te schrijven. Klik op de plusknop (+) om meerdere matrices op te nemen in één platte transformatie. U kunt hier metafuncties voor ADF-gegevensstromen gebruiken, inclusief name en type patroonkoppeling gebruiken om matrices uit te schrijven die voldoen aan deze criteria. Wanneer u meerdere matrices in één platte transformatie opneemt, zijn uw resultaten een cartesisch product van alle mogelijke matrixwaarden.

Screenshot that shows flatten results.

Hoofdmap uitschrijven

Standaard wordt met de afgevlakte transformatie een matrix boven aan de hiërarchie uitgeschreven waarin deze zich bevindt. U kunt desgewenst een matrix selecteren als de uitschrijvingsmap. De uitschrijvingshoofdmap moet een matrix zijn van complexe objecten die de uitschrijving per matrix zijn of bevatten. Als er een uitschrijvingshoofdmap is geselecteerd, bevatten de uitvoergegevens ten minste één rij per item in de uitschrijvingshoofdmap. Als de invoerrij geen items in de uitschrijvingshoofdmap bevat, wordt deze verwijderd uit de uitvoergegevens. Als u een uitschrijvingshoofdmap kiest, wordt altijd een kleiner dan of gelijk aantal rijen uitgevoerd dan 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 matrix is toegewezen, is de uitvoerkolom hetzelfde gegevenstype als de matrix. Als de uitschrijving op matrix een matrix is van complexe objecten die submatrices bevat, wordt een matrix gegenereerd door een item van die subarrie toe tewijsen.

Raadpleeg het tabblad Inspecteren en het voorbeeld van gegevens 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.

Flatten pattern

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%')

Dieptekolom doorkruising

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 eventueel uw naam uitdrukken als een reguliere expressie in dit vak in plaats van de bovenstaande 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 uitschrijving van hoofdmap met tekenreeksmatrix

Uitschrijven door Hoofdmap uitschrijven Projectie
goods.customers Geen Naam
klant = goods.customer

Uitvoer

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

Geen uitschrijving van hoofdmap met complexe matrix

Uitschrijven door Hoofdmap uitschrijven Projectie
goods.orders.shipped.orderItems Geen Naam
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = location

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 hoofdmap als het uitschrijven van matrix

Uitschrijven door Hoofdmap uitschrijven Projectie
goederen.orders goederen.orders 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'}

Hoofdmap uitschrijven met complexe matrix

Uitschrijven door Hoofdmap uitschrijven Projectie
goods.orders.shipped.orderItem goederen.orders Naam
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
location = location

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>

Opmerking

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)