Share via


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 completa per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

I flussi di dati sono disponibili sia in Azure Data Factory che in Azure Synapse Pipelines. Questo articolo si applica ai flussi di dati di mapping. Se non si ha esperienza con le trasformazioni, vedere l'articolo introduttivo Trasformare i dati usando un flusso di dati di 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.

Configurazione

La trasformazione flatten contiene le impostazioni di configurazione seguenti.

Screenshot that shows flatten settings.

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.

Screenshot that shows flatten results.

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.

Flatten pattern

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

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) 
  • Utilizzare la trasformazione Pivot per trasformare le righe in colonne tramite pivot.
  • Utilizzare la trasformazione Unpivot per trasformare le colonne da pivot alle righe.