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.
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.
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.
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)
Gerelateerde inhoud
- Gebruik de draaitransformatie om rijen naar kolommen te draaien.
- Gebruik de transformatie Draaitabel opheffen om kolommen naar rijen te draaien.