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í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 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 |
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de