bag_unpack plugin
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer
O plugin bag_unpack
descompacta uma única coluna do tipo dynamic
, tratando cada slot de nível superior do saco de propriedades como uma coluna. O plugin é invocado com o operador evaluate
.
Sintaxe
T|
evaluate
bag_unpack(
Coluna [,
OutputColumnPrefix ] [,
columnsConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
T | string |
✔️ | A entrada tabular cuja coluna Coluna deve ser descompactada. |
Coluna | dynamic |
✔️ | A coluna de T 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 - A consulta produz um erro (padrão)replace_source - A coluna de origem é substituídakeep_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 plug-in bag_unpack . Especificar o esquema esperado otimiza a execução da consulta por não ter que executar primeiro 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
(
ColumnName:
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 plugin bag_unpack
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 quantas forem os slots distintos nos valores do saco 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 diferem no tipo.
Observação
Se o OutputSchema não for especificado, o esquema de saída do plug-in varia de acordo com os valores dos dados de entrada. Portanto, várias execuções do plugin usando entradas de dados diferentes, podem produzir esquema de saída diferente.
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. Em especial:
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 slots, quando prefixados por OutputColumnPrefix, devem ser nomes de entidade válidos e seguir as regras de nomenclatura do identificador .
Os valores nulos são ignorados.
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)
Output
Idade | Designação |
---|---|
20 | John |
40 | Fábio |
30 | Jasmim |
Expanda um saco com OutputColumnPrefix
Expanda um saco e use a opção OutputColumnPrefix
para produzir nomes de colunas 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_')
Output
Property_Age | Property_Name |
---|---|
20 | John |
40 | Fábio |
30 | Jasmim |
Expandir um saco com colunasConflito
Expanda um saco e use a opção columnsConflict
para resolver conflitos entre colunas existentes e colunas produzidas pelo operador bag_unpack()
.
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
Output
Idade | Designação |
---|---|
20 | John |
40 | Fábio |
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
Output
Idade | Designação |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
Expandir um saco com ignoredProperties
Expanda um saco e use a opção ignoredProperties
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']))
Output
Designação |
---|
John |
Fábio |
Jasmim |
Expandir um pacote com um OutputSchema definido por consulta
Expanda um pacote e use a opção OutputSchema
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)
Output
Designação | Idade |
---|---|
John | 20 |
Fábio | 40 |
Jasmim | 30 |
Expanda um pacote e use a opção OutputSchema
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)
Output
Descrição | Designação | Idade |
---|---|---|
Estudante | John | 20 |
Professor | Fábio | 40 |
Estudante | Jasmim | 30 |