Compartilhar via


Plug-in bag_unpack

O bag_unpack plugin descompacta uma única coluna do tipo dynamic, tratando cada slot de nível superior do pacote de propriedades como uma coluna. O plugin é invocado com o evaluate operador.

Sintaxe

Coluna T evaluate bag_unpack( | [, OutputColumnPrefix ] [ , columnsConflict ] [, ignoredProperties ] ) [: OutputSchema]

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Digitar Obrigatória Descrição
T string ✔️ A entrada tabular cuja coluna Coluna deve ser descompactada.
Coluna dynamic ✔️ A coluna de T para descompactar.
OutputColumnPrefix string Um prefixo comum para adicionar a todas as colunas produzidas pelo plugin.
colunasConflito string A direção para a resolução de conflitos de coluna. Valores válidos:
error - Consulta produz um erro (padrão)
replace_source - A coluna de origem é substituída
keep_source - A coluna de origem é mantida
ignoredProperties dynamic Um conjunto opcional de propriedades de saco a ser ignorado. }
OutputSchema Os nomes e tipos para as colunas esperadas da saída do bag_unpack plugin. A especificação do esquema esperado otimiza a execução da consulta por não precisar primeiro executar a consulta real para explorar o esquema. Para obter informações sobre sintaxe, consulte Sintaxe do esquema de saída.

Sintaxe do esquema de saída

(Nome da Coluna : ColumnType [, ...])

Para adicionar todas as colunas da tabela de entrada à saída do plug-in, use um curinga * como o primeiro parâmetro, da seguinte maneira:

(* , ColumnName : Tipo de Coluna [, ...])

Devoluções

O bag_unpack plugin retorna uma tabela com tantos registros quanto sua entrada tabular (T). O esquema da tabela é o mesmo que o esquema de sua entrada tabular com as seguintes modificações:

  • A coluna de entrada especificada (Coluna) é removida.
  • O esquema é estendido com tantas colunas quanto houver slots distintos nos valores do conjunto de propriedades de nível superior de T. O nome de cada coluna corresponde ao nome de cada slot, opcionalmente prefixado por OutputColumnPrefix. Seu tipo é o tipo do slot, se todos os valores do mesmo slot tiverem o mesmo tipo, ou dynamic, se os valores forem diferentes em tipo.

Observação

Se o OutputSchema não for especificado, o esquema de saída do plug-in varia de acordo com os valores de dados de entrada. Portanto, várias execuções do plugin usando entradas de dados diferentes, podem produzir diferentes esquemas de saída.

Observação

Os dados de entrada para o plug-in devem ser tais que o esquema de saída siga todas as regras para um esquema tabular. Especialmente:

  • Um nome de coluna de saída não pode ser igual a uma coluna existente na entrada tabular T, a menos que seja a coluna a ser descompactada (Coluna), pois isso produzirá duas colunas com o mesmo nome.

  • Todos os nomes de slot, quando prefixados por OutputColumnPrefix, devem ser nomes de entidade válidos e seguir as regras de nomenclatura do identificador.

Exemplos

Expandir um saco

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

Saída

Idade Nome
20 John
40 Dave
30 Jasmim

Expandir um saco com OutputColumnPrefix

Expanda um saco e use a OutputColumnPrefix opção para produzir nomes de coluna que comecem com o prefixo 'Property_'.

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

Saída

Property_Age Property_Name
20 John
40 Dave
30 Jasmim

Expandir um saco com colunasConflito

Expanda um saco e use a columnsConflict opção para resolver conflitos entre colunas existentes e colunas produzidas pelo 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

Saída

Idade Nome
20 John
40 Dave
30 Jasmim
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

Saída

Idade Nome
20 Old_name
40 Old_name
30 Old_name

Expandir um saco com ignoredProperties

Expanda um saco e utilize a ignoredProperties opção para ignorar determinadas propriedades no saco de propriedades.

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']))

Saída

Nome
John
Dave
Jasmim

Expandir um pacote com um OutputSchema definido por consulta

Expanda um pacote e use a OutputSchema opção para permitir que várias otimizações sejam avaliadas antes de executar a 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)

Saída

Nome Idade
John 20
Dave 40
Jasmim 30

Expanda um pacote e use a OutputSchema opção para permitir que várias otimizações sejam avaliadas antes de executar a consulta real. Use um curinga * para retornar todas as colunas da tabela 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)

Saída

Descrição Nome Idade
Aluno John 20
Professor Dave 40
Aluno Jasmim 30