plug-in bag_unpack
O bag_unpack
plug-in descompacta uma única coluna do tipo dynamic
, tratando cada bloco de nível superior do saco de propriedades como uma coluna. O plug-in é invocado com o evaluate
operador .
Syntax
T|
evaluate
bag_unpack(
Coluna [,
OutputColumnPrefix ] [,
columnsConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Tipo | Necessário | Descrição |
---|---|---|---|
T | string |
✔️ | A entrada tabular cuja coluna Coluna deve ser desempacotada. |
Coluna | dynamic |
✔️ | A coluna de T a descompactar. |
OutputColumnPrefix | string |
Um prefixo comum para adicionar a todas as colunas produzidas pelo plug-in. | |
columnsConflict | string |
A direção para a resolução de conflitos de colunas. Valores válidos:error - A consulta produz um erro (predefiniçã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 ignorar. } | |
OutputSchema | Os nomes e tipos das colunas esperadas da saída do bag_unpack plug-in. Especificar o esquema esperado otimiza a execução de consultas ao não ter de executar primeiro a consulta real para explorar o esquema. Para obter informações sobre sintaxe, veja 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, utilize um caráter universal *
como primeiro parâmetro, da seguinte forma:
(
*
,
ColumnName:
ColumnType [,
...] )
Devoluções
O bag_unpack
plug-in devolve uma tabela com tantos registos como a entrada tabular (T). O esquema da tabela é o mesmo que o esquema da respetiva entrada tabular com as seguintes modificações:
- A coluna de entrada (Coluna) especificada é removida.
- O esquema é expandido com tantas colunas quanto existem ranhuras distintas nos valores do saco de propriedades de nível superior de T. O nome de cada coluna corresponde ao nome de cada bloco, opcionalmente com o prefixo OutputColumnPrefix. O tipo é o tipo do bloco, se todos os valores do mesmo bloco tiverem o mesmo tipo, ou
dynamic
, se os valores forem diferentes no tipo.
Nota
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. Por conseguinte, várias execuções do plug-in com entradas de dados diferentes podem produzir um esquema de saída diferente.
Nota
Os dados de entrada para o plug-in têm de ser de tal forma que o esquema de saída siga todas as regras para um esquema tabular. Em particular:
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 desempacotar (Coluna), uma vez que produzirá duas colunas com o mesmo nome.
Todos os nomes de blocos, quando prefixados por OutputColumnPrefix, têm de 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 | Name |
---|---|
20 | John |
40 | Dave |
30 | Jasmim |
Expandir um saco com OutputColumnPrefix
Expanda um saco e utilize 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_')
Saída
Property_Age | Property_Name |
---|---|
20 | John |
40 | Dave |
30 | Jasmim |
Expandir um saco com colunasConflict
Expanda um saco e utilize a opção columnsConflict
para resolver conflitos entre colunas e colunas existentes 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 | Name |
---|---|
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 | Name |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
Expandir um saco com propriedades ignoradas
Expanda um saco e utilize 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']))
Saída
Name |
---|
John |
Dave |
Jasmim |
Expandir um saco com uma OutputSchema definida por consulta
Expanda um saco e utilize 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)
Saída
Name | Idade |
---|---|
John | 20 |
Dave | 40 |
Jasmim | 30 |
Expanda um saco e utilize a opção OutputSchema
para permitir que várias otimizações sejam avaliadas antes de executar a consulta real. Utilize um caráter universal *
para devolver 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 |
---|---|---|
Estudante | John | 20 |
Professor | Dave | 40 |
Estudante | Jasmim | 30 |
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários