Transformación Aplanar en el flujo de datos de asignación
SE APLICA A: Azure Data Factory Azure Synapse Analytics
Sugerencia
Pruebe Data Factory en Microsoft Fabric, una solución de análisis todo en uno para empresas. Microsoft Fabric abarca todo, desde el movimiento de datos hasta la ciencia de datos, el análisis en tiempo real, la inteligencia empresarial y los informes. Obtenga información sobre cómo iniciar una nueva evaluación gratuita.
Los flujos de datos están disponibles en las canalizaciones Azure Data Factory y Azure Synapse. Este artículo se aplica a los flujos de datos de asignación. Si carece de experiencia con las transformaciones, consulte el artículo de introducción Transformación de datos mediante flujos de datos de asignación.
Use la transformación Aplanar para tomar valores de matriz incluidos en estructuras jerárquicas, como JSON, y expandirlos en filas individuales. Este proceso se conoce como desnormalización.
Configuración
La transformación Aplanar contiene los siguientes valores de configuración.
Expandir por
Seleccione la matriz que se va a expandir. Los datos de salida tendrán una fila por cada elemento de cada matriz. Si la matriz que se va a expandir de la fila de entrada tiene un valor NULL o está vacía, habrá una fila de salida con valores no expandidos con valor NULL. Tiene la opción de anular la inscripción de más de una matriz por transformación de acoplamiento. Haga clic en el botón más (+) para incluir varias matrices en una sola transformación de acoplamiento. Puede usar las funciones meta de flujo de datos de ADF aquí, incluidas name
y type
, y usar la coincidencia de patrones para anular la inscripción de matrices que coincidan con esos criterios. Al incluir varias matrices en una sola transformación de acoplamiento, los resultados serán un producto cartesiano de todos los valores de matriz posibles.
Expandir la raíz
De forma predeterminada, la transformación Aplanar expande una matriz sobre la jerarquía en la que existe. Opcionalmente, puede seleccionar una matriz como raíz de la expansión. La raíz de la expansión debe ser una matriz de objetos complejos que sea o que contenga la matriz que se va a expandir. Si se selecciona una raíz de expansión, los datos de salida contendrán al menos una fila por cada elemento de dicha raíz. Si la fila de entrada no tiene ningún elemento de la raíz de expansión, se quitará de los datos de salida. Al elegir una raíz de expansión, siempre se generará un número de filas menor o igual que el comportamiento predeterminado.
Asignación de aplanamiento
De forma similar a la transformación de selección, elija la proyección de la nueva estructura a partir de los campos de entrada y la matriz desnormalizada. Si se asigna una matriz desnormalizada, la columna de salida tendrá el mismo tipo de datos que la matriz. Si la matriz de expansión es una matriz de objetos complejos que contiene submatrices, la asignación de un elemento de dicha submatriz producirá una matriz.
Consulte la pestaña de inspección y la vista previa de los datos para comprobar la salida de la asignación.
Asignación basada en reglas
La transformación de aplanamiento admite la asignación basada en reglas, lo que permite crear transformaciones dinámicas y flexibles que aplanarán matrices según reglas y estructuras planas basadas en niveles de jerarquía.
Condición de coincidencia
Escriba una condición de coincidencia de patrones para la o las columnas que quiera aplanar mediante coincidencias exactas o patrones. Ejemplo: like(name,'cust%')
Recorrido de columna profundo
Valor opcional que indica al servicio que controle todas las subcolumnas de un objeto complejo individualmente en lugar de controlar el objeto complejo como una columna completa.
Nivel de jerarquía
Elija el nivel de la jerarquía que quiere expandir.
Coincidencias de nombres (regex)
De manera opcional, elija expresar la coincidencia de nombres como una expresión regular en este cuadro, en lugar de usar la condición de coincidencia anterior.
Ejemplos
Consulte el siguiente objeto JSON como referencia para los ejemplos siguientes de la transformación Aplanar.
{
"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"}
Sin raíz de expansión, con matriz de cadenas
Expandir por | Expandir la raíz | Proyección |
---|---|---|
goods.customers | Ninguno | name customer = goods.customer |
Output
{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}
Sin raíz de expansión, con matriz compleja
Expandir por | Expandir la raíz | Proyección |
---|---|---|
goods.orders.shipped.orderItems | Ninguno | name 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'}
Misma raíz que la matriz de expansión
Expandir por | Expandir la raíz | Proyección |
---|---|---|
goods.orders | goods.orders | name goods.orders.shipped.orderItems.itemName goods.customers ubicación |
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'}
Raíz de expansión, con matriz compleja
Expandir por | Expandir la raíz | Proyección |
---|---|---|
goods.orders.shipped.orderItem | goods.orders | name 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 de flujo de datos
Sintaxis
<incomingStream>
foldDown(unroll(<unroll cols>),
mapColumn(
name,
each(<array>(type == '<arrayDataType>')),
each(<array>, match(true())),
location
)) ~> <transformationName>
Ejemplo
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)
Contenido relacionado
- Use la transformación Dinamizar para dinamizar las filas en columnas.
- Use la transformación Anular dinamización para dinamizar las columnas a filas.