Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
APPLICABILE A:
Azure Data Factory
Azure Synapse Analytics
Suggerimento
Data Factory in Microsoft Fabric è la nuova generazione di Azure Data Factory, con un'architettura più semplice, un'intelligenza artificiale predefinita e nuove funzionalità. Se non si ha familiarità con l'integrazione dei dati, iniziare con Fabric Data Factory. I carichi di lavoro di Azure Data Factory esistenti possono eseguire l'aggiornamento a Fabric per accedere a nuove funzionalità tra data science, analisi in tempo reale e creazione di report.
I flussi di dati sono disponibili sia nelle pipeline Azure Data Factory che nelle pipeline di Azure Synapse Analytics. Questo articolo si applica ai flussi di dati di mapping. Se non si ha familiarità con le trasformazioni, vedere l'articolo introduttivo Trasformare i dati usando flussi di dati di mapping.
Suggerimento
Per la trasformazione equivalente (Espandi colonna) in Dataflow Gen2, vedere Una guida a Dataflow Gen2 per gli utenti del mapping del flusso di dati.
Usare la trasformazione flatten per raccogliere i valori degli array all'interno di strutture gerarchiche come JSON e scomporli in righe singole. Questo processo è noto come denormalizzazione.
Impostazione
La trasformazione flatten contiene le impostazioni di configurazione seguenti.
Srotolare tramite
Selezionare una matrice da srotolare. I dati di output hanno una riga per elemento in ogni matrice. Se l'array per espansione nella riga di input è null o vuoto, è presente una riga di output con valori espansi come null. È possibile espandere più matrici per la trasformazione Flatten. Seleziona il pulsante più (+) per includere più matrici in una singola trasformazione Flatten. In questo contesto è possibile utilizzare le metafunzioni di flusso di dati di ADF (Azure Data Factory), incluse name e type, e utilizzare il matching dei pattern per espandere le matrici che soddisfano tali criteri. Quando si includono più matrici in una singola trasformazione Flatten, i risultati sono un prodotto cartesiano di tutti i possibili valori di matrice.
Radice di srotolamento
Per impostazione predefinita, la trasformazione appiattita srotola una matrice al livello superiore della gerarchia in cui si trova. Opzionalmente, è possibile selezionare una matrice come radice di srotolamento. La radice di srotolamento deve essere una matrice di oggetti complessi che sia o contenga lo srotolamento tramite matrice. Se si seleziona una radice di espansione, i dati di output contengono almeno una riga per ogni elemento nella radice di espansione. Se la riga di input non contiene elementi nella radice di espansione, viene eliminata dai dati di output. La scelta di una radice di srotolamento restituisce sempre un numero di righe inferiore o uguale rispetto al comportamento predefinito.
Mapping appiattito
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 è lo stesso tipo di dati della matrice. Se il dispiegamento tramite array è un array di oggetti complessi che contiene sottoarray, mappare un elemento di tale sottoarray restituisce un array.
Fare riferimento alla scheda "Inspect" e all'anteprima dei dati per verificare l'output del mapping.
mapping basato su regole
La trasformazione di flatten supporta il mapping basato su regole, consentendo di creare trasformazioni dinamiche e flessibili che appiattiscono gli array in base a regole e appiattiscono le strutture in base ai livelli gerarchici.
Condizione di corrispondenza
Immettere una condizione di corrispondenza dei modelli per la colonna o le colonne che si desidera appiattire usando corrispondenza esatta o modelli. Esempio: like(name,'cust%')
Attraversamento profondo delle colonne
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.
Esempi
Fare riferimento all'oggetto JSON seguente per i seguenti esempi della trasformazione di appiattimento.
{
"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 srotolamento con matrice di stringhe
| Srotolare tramite | Radice di srotolamento | Proiezione |
|---|---|---|
| goods.customers | nessuno | nome customer = goods.cliente |
Output
{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}
Nessun radice di srotolamento con matrice complessa
| Srotolare tramite | Radice di srotolamento | Proiezione |
|---|---|---|
| goods.orders.shipped.orderItems | nessuno | nome orderId = goods.orders.orderId itemName = goods.orders.shipped.orderItems.itemName itemQty = goods.orders.shipped.orderItems.itemQty location = posizione |
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 come srotolamento tramite matrice
| Srotolare tramite | Radice di srotolamento | Proiezione |
|---|---|---|
| goods.orders | goods.orders | nome goods.orders.shipped.orderItems.itemName goods.customers posizione |
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'}
Radice di srotolamento con matrice complessa
| Srotolare tramite | Radice di srotolamento | Proiezione |
|---|---|---|
| goods.orders.shipped.orderItem | goods.orders | nome orderId = goods.orders.orderId itemName = goods.orders.shipped.orderItems.itemName itemQty = goods.orders.shipped.orderItems.itemQty location = posizione |
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 Pivot Transformation per trasformare le righe in colonne.
- Utilizzare la trasformazione Unpivot per trasformare le colonne in righe.