Compartir a través de


Complemento bag_unpack

Se aplica a: ✅Microsoft FabricAzure 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