Rendere flat la trasformazione nel flusso di dati di mapping
SI APPLICA A: Azure Data Factory Azure Synapse Analytics
Suggerimento
Provare Data Factory in Microsoft Fabric, una soluzione di analisi all-in-one per le aziende. Microsoft Fabric copre tutto, dallo spostamento dati al data science, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Vedere le informazioni su come iniziare una nuova prova gratuita!
I flussi di dati sono disponibili nelle pipeline sia di Azure Data Factory che di Azure Synapse. Questo articolo si applica ai flussi di dati per mapping. Se non si ha esperienza con le trasformazioni, vedere l'articolo introduttivo Trasformare i dati con un flusso di dati per mapping.
Usare la trasformazione flat per accettare valori di matrice all'interno di strutture gerarchica, ad esempio JSON e annullare la registrazione in singole righe. Questo processo è noto come denormalizzazione.
Impostazione
La trasformazione flatten contiene le impostazioni di configurazione seguenti.
Annullare la registrazione in base a
Selezionare una matrice per annullare la registrazione. I dati di output avranno una riga per elemento in ogni matrice. Se la matrice di annullamento della registrazione nella riga di input è null o vuota, sarà presente una riga di output con valori di rollback null. È possibile annullare la registrazione di più matrici per trasformazione Flatten. Fare clic sul pulsante più (+) per includere più matrici in una singola trasformazione Flatten. In questo caso è possibile usare le meta funzioni del flusso di dati di Azure Data Factory, incluse name
e type
usano criteri di ricerca per annullare la registrazione di matrici che soddisfano tali criteri. Quando si includono più matrici in una singola trasformazione Flatten, i risultati saranno un prodotto cartesiano di tutti i possibili valori di matrice.
Annullare la registrazione della radice
Per impostazione predefinita, la trasformazione flat annulla la registrazione di una matrice nella parte superiore della gerarchia in cui si trova. Facoltativamente, è possibile selezionare una matrice come radice di annullamento della registrazione. La radice di annullamento della registrazione deve essere una matrice di oggetti complessi che sia o contenga l'annullamento della registrazione per matrice. Se è selezionata una radice di annullamento della registrazione, i dati di output conterranno almeno una riga per ogni elemento nella radice di annullamento della registrazione. Se la riga di input non contiene elementi nella radice di annullamento della registrazione, verrà eliminata dai dati di output. La scelta di una radice di annullamento della registrazione restituirà sempre un numero minore o uguale di righe rispetto al comportamento predefinito.
Mapping flat
Analogamente alla trasformazione di selezione, scegliere la proiezione della nuova struttura dai campi in ingresso e dalla matrice denormalizzata. Se viene eseguito il mapping di una matrice denormalizzata, la colonna di output sarà lo stesso tipo di dati della matrice. Se l'annullamento della registrazione per matrice è una matrice di oggetti complessi che contiene sottoarray, il mapping di un elemento di tale subarry restituirà una matrice.
Fare riferimento alla scheda Inspect e all'anteprima dei dati per verificare l'output del mapping.
mapping basato su regole
La trasformazione flatten supporta il mapping basato su regole che consente di creare trasformazioni dinamiche e flessibili che appiattiranno le matrici in base a regole e strutture flat in base ai livelli della gerarchia.
Condizione di corrispondenza
Immettere una condizione di corrispondenza dei criteri per la colonna o le colonne che si desidera rendere flat usando criteri o corrispondenza esatti. Esempio: like(name,'cust%')
Attraversamento delle colonne profonde
Impostazione facoltativa che indica al servizio di gestire singolarmente tutte le sottocolonne di un oggetto complesso anziché gestire l'oggetto complesso come intera colonna.
Livello di gerarchia
Scegliere il livello della gerarchia da espandere.
Corrispondenze dei nomi (regex)
Facoltativamente, scegliere di esprimere il nome corrispondente come espressione regolare in questa casella, anziché usare la condizione di corrispondenza precedente.
Esempi
Fare riferimento all'oggetto JSON seguente per gli esempi seguenti della trasformazione flat
{
"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"}
Nessuna radice di annullamento della registrazione con matrice di stringhe
Annullare la registrazione in base a | Annullare la registrazione della radice | Projection |
---|---|---|
goods.customers | None | nome customer = goods.customer |
Output
{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}
Nessuna radice di annullamento della registrazione con matrice complessa
Annullare la registrazione in base a | Annullare la registrazione della radice | Projection |
---|---|---|
goods.orders.shipped.orderItems | None | nome 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'}
Stessa radice della matrice di annullamento della registrazione
Annullare la registrazione in base a | Annullare la registrazione della radice | Projection |
---|---|---|
goods.orders | goods.orders | nome goods.orders.shipped.orderItems.itemName goods.customers location |
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'}
Annullare la registrazione della radice con una matrice complessa
Annullare la registrazione in base a | Annullare la registrazione della radice | Projection |
---|---|---|
goods.orders.shipped.orderItem | goods.orders | nome 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'}
Script del flusso di dati
Sintassi
<incomingStream>
foldDown(unroll(<unroll cols>),
mapColumn(
name,
each(<array>(type == '<arrayDataType>')),
each(<array>, match(true())),
location
)) ~> <transformationName>
Esempio
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)
Contenuto correlato
- Utilizzare la trasformazione Pivot per trasformare le righe in colonne tramite pivot.
- Utilizzare la trasformazione Unpivot per trasformare le colonne da pivot alle righe.