Complemento bag_unpack
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer
El bag_unpack
complemento desempaqueta una sola columna de tipo dynamic
, tratando cada ranura de nivel superior de contenedor de propiedades como una columna. El complemento se invoca con el evaluate
operador .
Sintaxis
Columna T evaluate
bag_unpack(
|
[,
OutputColumnPrefix ] [,
columnsConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Type | Obligatorio | Descripción |
---|---|---|---|
T | string |
✔️ | Entrada tabular cuya columna columna se va a desempaquetar. |
Column | dynamic |
✔️ | Columna de T que se va a desempaquetar. |
OutputColumnPrefix | string |
Prefijo común que se va a agregar a todas las columnas generadas por el complemento. | |
columnsConflict | string |
Dirección para la resolución de conflictos de columnas. Valores válidos: error - La consulta genera un error (valor predeterminado)replace_source - Se reemplaza la columna de origen.keep_source - Se mantiene la columna de origen. |
|
ignoredProperties | dynamic |
Conjunto opcional de propiedades de contenedor que se omitirán. } | |
OutputSchema | Los nombres y tipos de las columnas esperadas de la salida del bag_unpack complemento. Al especificar el esquema esperado, no es necesario ejecutar primero la consulta real para explorar el esquema. Para obtener información sobre la sintaxis, consulte Sintaxis de esquema de salida. |
Sintaxis de esquema de salida
(
ColumnName :
ColumnType [,
...])
Para agregar todas las columnas de la tabla de entrada a la salida del complemento, use un carácter comodín *
como primer parámetro, como se indica a continuación:
(
*
,
ColumnName :
ColumnType [,
...])
Devoluciones
El bag_unpack
complemento devuelve una tabla con tantos registros como su entrada tabular (T). El esquema de la tabla es el mismo que el esquema de su entrada tabular con las siguientes modificaciones:
- Se quita la columna de entrada especificada (Columna).
- El esquema se extiende con tantas columnas como hay ranuras distintas en los valores de contenedor de propiedades de nivel superior de T. El nombre de cada columna corresponde al nombre de cada ranura, prefijo opcionalmente por OutputColumnPrefix. Su tipo es el tipo de la ranura, si todos los valores de la misma ranura tienen el mismo tipo, o
dynamic
, si los valores difieren en el tipo.
Nota:
Si no se especifica OutputSchema, el esquema de salida del complemento varía según los valores de datos de entrada. Por lo tanto, varias ejecuciones del complemento que usan entradas de datos diferentes pueden generar un esquema de salida diferente.
Los datos de entrada del complemento deben ser de forma que el esquema de salida siga todas las reglas de un esquema tabular. En concreto:
Un nombre de columna de salida no puede ser el mismo que una columna existente en la entrada tabular T, a menos que sea la columna que se va a desempaquetar (Columna), ya que generará dos columnas con el mismo nombre.
Todos los nombres de ranura, cuando outputColumnPrefix prefijo, deben ser nombres de entidad válidos y seguir las reglas de nomenclatura de identificadores.
Se omiten los valores NULL.
Ejemplos
Expandir una bolsa
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
Salida
Edad | Nombre |
---|---|
20 | John |
40 | Dave |
30 | Jazmín |
Expandir un contenedor con OutputColumnPrefix
Expanda un contenedor y use la OutputColumnPrefix
opción para generar nombres de columna que comiencen por el prefijo "Property_".
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')
Salida
Property_Age | Property_Name |
---|---|
20 | John |
40 | Dave |
30 | Jazmín |
Expandir un contenedor con columnsConflict
Expanda un contenedor y use la columnsConflict
opción para resolver conflictos entre las columnas y columnas existentes generadas por el bag_unpack()
operador .
datatable(Name:string, d:dynamic)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Use new name
Salida
Edad | Nombre |
---|---|
20 | John |
40 | Dave |
30 | Jazmín |
datatable(Name:string, d:dynamic)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old name
Salida
Edad | Nombre |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
Expandir un contenedor con ignoredProperties
Expanda un contenedor y use la ignoredProperties
opción para omitir determinadas propiedades en el contenedor de propiedades.
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20, "Address": "Address-1" }),
dynamic({"Name": "Dave", "Age":40, "Address": "Address-2"}),
dynamic({"Name": "Jasmine", "Age":30, "Address": "Address-3"}),
]
// Ignore 'Age' and 'Address' properties
| evaluate bag_unpack(d, ignoredProperties=dynamic(['Address', 'Age']))
Salida
Nombre |
---|
John |
Dave |
Jazmín |
Expansión de un contenedor con outputSchema definido por la consulta
Expanda un contenedor y use la OutputSchema
opción para permitir que se evalúen varias optimizaciones antes de ejecutar la consulta real.
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d) : (Name:string, Age:long)
Salida
Nombre | Age |
---|---|
John | 20 |
Dave | 40 |
Jazmín | 30 |
Expanda un contenedor y use la OutputSchema
opción para permitir que se evalúen varias optimizaciones antes de ejecutar la consulta real. Use un carácter comodín *
para devolver todas las columnas de la tabla de entrada.
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20}), "Student",
dynamic({"Name": "Dave", "Age":40}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
Salida
Descripción | Nombre | Age |
---|---|---|
Estudiante | John | 20 |
Docente | Dave | 40 |
Estudiante | Jazmín | 30 |