Complemento bag_unpack

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 .

Syntax

T|evaluatebag_unpack(Column [,OutputColumnPrefix ] [,columnsConflict ] [,ignoredProperties ] ) [:OutputSchema]

Más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido 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 - La columna de origen se reemplaza
keep_source - La columna de origen se mantiene
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 del 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.

Nota

Los datos de entrada del complemento deben ser de modo 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 desempaquetada (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.

Ejemplos

Expandir un contenedor

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)

Salida

Age Nombre
20 John
40 Dave
30 Jasmine

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 Jasmine

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

Age Nombre
20 John
40 Dave
30 Jasmine
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

Age Nombre
20 Old_name
40 Old_name
30 Old_name

Expandir un contenedor con ignoredProperties

Expanda una bolsa 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
Jasmine

Expansión de un contenedor con outputSchema definido por una 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
Jasmine 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
Profesor Dave 40
Estudiante Jasmine 30