Compartilhar via


Plug-in bag_unpack

Aplica-se a: ✅Microsoft FabricAzure Data Explorer

O bag_unpack plug-in descompacta uma única coluna do tipo dynamic, tratando cada slot de nível superior do recipiente de propriedades como uma coluna. O plug-in é 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 Column deve ser descompactada.
Coluna dynamic ✔️ A coluna de T a ser descompactada.
Prefixo de Coluna de Saída string Um prefixo comum para adicionar a todas as colunas produzidas pelo plug-in.
colunasConflito string A direção para a resolução de conflitos de coluna. Valores válidos:
error - A 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 do saco a serem ignoradas. }
Esquema de saída Os nomes e tipos das colunas esperadas da saída do bag_unpack plug-in. Especificar o esquema esperado otimiza a execução da consulta por não ter que primeiro executar a consulta real para explorar o esquema. Para obter informações de 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 : ColumnType [, ...])

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 recipiente 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 diferirem no tipo.

Observação

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

  • 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 o mesmo que 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.

  • Valores nulos são ignorados.

Exemplos

Expandir uma bolsa

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 repositório com OutputColumnPrefix

Expanda um repositório 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 recipiente 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 repositório com ignoredProperties

Expanda um recipiente e use a ignoredProperties opção para ignorar determinadas propriedades no recipiente 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 repositório com um OutputSchema definido por consulta

Expanda um recipiente 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 recipiente 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