Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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(
[,
] [,
] [,
] [)
:
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
Nombre | Tipo | Obligatorio | Descripción |
---|---|---|---|
T | string |
✔️ | Entrada tabular cuya columna columna se va a desempaquetar. |
Columna | 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 | Especifique los nombres y tipos de columna para la salida del bag_unpack complemento. Para obtener información sobre la sintaxis, consulte Sintaxis de esquema de salida y para comprender las implicaciones, consulte Consideraciones de rendimiento. |
Sintaxis de esquema de salida
(
ColumnName:
ColumnType [,
...])
Use un carácter comodín *
como primer parámetro para incluir todas las columnas de la tabla de origen en la salida, como se indica a continuación:
(
*
,
ColumnName:
ColumnType [,
...])
Consideraciones sobre el rendimiento
El uso del complemento sin outputSchema puede tener graves implicaciones de rendimiento en grandes conjuntos de datos y debe evitarse.
Proporcionar outputSchema permite al motor de consultas optimizar la ejecución de la consulta, ya que puede determinar el esquema de salida sin necesidad de analizar y analizar los datos de entrada. Esto es beneficioso cuando los datos de entrada son grandes o complejos. Consulte los ejemplos con implicaciones de rendimiento del uso del complemento con y sin outputSchema definido.
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 nombre de cada columna corresponde al nombre de cada ranura, prefijo opcionalmente por OutputColumnPrefix.
- El tipo de cada columna es el tipo de ranura, si todos los valores de la misma ranura tienen el mismo tipo, o
dynamic
, si los valores difieren en el tipo. - El esquema se extiende con tantas columnas como hay ranuras distintas en los valores de contenedor de propiedades de nivel superior de T.
Nota:
- Si no especifica OutputSchema, el esquema de salida del complemento varía en función de los valores de datos de entrada. Varias ejecuciones del complemento con diferentes entradas de datos pueden generar esquemas de salida diferentes.
- Si se especifica outputSchema , el complemento devuelve solo las columnas definidas en la sintaxis del esquema de salida, a menos que se use un carácter comodín
*
. - Para devolver todas las columnas de los datos de entrada y las columnas definidas en OutputSchema, use un carácter comodín
*
en OutputSchema.
Las reglas de esquema tabular se aplican a los datos de entrada. 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). De lo contrario, la salida incluye 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.
El complemento omite los valores NULL.
Ejemplos
Los ejemplos de esta sección muestran cómo usar la sintaxis para ayudarle a empezar.
Expanda 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 | Juan |
40 | Dave |
30 | Jazmín |
Expanda un contenedor y use la OutputColumnPrefix
opción para generar nombres de columna con un prefijo:
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 | Juan |
40 | Dave |
30 | Jazmín |
Expanda un contenedor y use la columnsConflict
opción para resolver un conflicto de columna entre la columna dinámica y la columna existente:
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 | Juan |
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 |
Expanda una bolsa y use la ignoredProperties
opción para omitir 2 de las propiedades del 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 |
---|
Juan |
Dave |
Jazmín |
Expanda un contenedor y use la opción OutputSchema:
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 | Edad |
---|---|
Juan | 20 |
Dave | 40 |
Jazmín | 30 |
Expanda un contenedor con outputSchema y use la opción comodín*
:
Esta consulta devuelve la descripción de ranura original y las columnas definidas en OutputSchema.
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20, "height":180}), "Student",
dynamic({"Name": "Dave", "Age":40, "height":160}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30, "height":172}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
Salida
Descripción | Nombre | Edad |
---|---|---|
Estudiante | Juan | 20 |
Docente | Dave | 40 |
Estudiante | Jazmín | 30 |
Ejemplos con implicaciones de rendimiento
Expanda un contenedor con y sin outputSchema definido para comparar las implicaciones de rendimiento:
En este ejemplo se usa una tabla disponible públicamente en el clúster de ayuda. En la base de datos ContosoSales , hay una tabla denominada SalesDynamic. La tabla contiene datos de ventas e incluye una columna dinámica denominada Customer_Properties.
Ejemplo sin esquema de salida: la primera consulta no define outputSchema. La consulta tarda 5,84 segundos en CPU y examina 36,39 MB de datos.
SalesDynamic | evaluate bag_unpack(Customer_Properties) | summarize Sales=sum(SalesAmount) by Country, State
Ejemplo con el esquema de salida: la segunda consulta proporciona una outputSchema. La consulta tarda 0,45 segundos en CPU y examina 19,31 MB de datos. La consulta no tiene que analizar la tabla de entrada, ahorrando tiempo de procesamiento.
SalesDynamic | evaluate bag_unpack(Customer_Properties) : (*, Country:string, State:string, City:string) | summarize Sales=sum(SalesAmount) by Country, State
Salida
La salida es la misma para ambas consultas. A continuación se muestran las primeras 10 filas de la salida.
Canadá | Columbia Británica | 56,101,083 |
---|---|---|
Reino Unido | Inglaterra | 77,288,747 |
Australia | Victoria | 31,242,423 |
Australia | Queensland | 27,617,822 |
Australia | Australia Meridional | 8,530,537 |
Australia | Nueva Gales del Sur | 54,765,786 |
Australia | Tasmania | 3,704,648 |
Canadá | Alberta | 375,061 |
Canadá | Ontario | 38,282 |
Estados Unidos | Washington | 80,544,870 |
... | ... | ... |