Plug-in bag_unpack
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati
Il bag_unpack
plug-in decomprime una singola colonna di tipo dynamic
, trattando ogni slot di primo livello del contenitore delle proprietà come colonna. Il plug-in viene richiamato con l'operatore evaluate
.
Sintassi
T |
bag_unpack(
evaluate
Column [,
OutputColumnPrefix ] [,
columnsConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
T | string |
✔️ | Input tabulare la cui colonna deve essere decompressa. |
Istogramma | dynamic |
✔️ | Colonna di T da decomprimere. |
OutputColumnPrefix | string |
Prefisso comune da aggiungere a tutte le colonne prodotte dal plug-in. | |
columnsConflict | string |
Direzione per la risoluzione dei conflitti di colonna. Valori validi: error - La query genera un errore (impostazione predefinita)replace_source - La colonna di origine viene sostituitakeep_source - La colonna di origine viene mantenuta |
|
ignoredProperties | dynamic |
Set facoltativo di proprietà del contenitore da ignorare. } | |
OutputSchema | Nomi e tipi per le colonne previste dell'output del plug-in bag_unpack . Se si specifica lo schema previsto, l'esecuzione delle query non deve prima eseguire la query effettiva per esplorare lo schema. Per informazioni sulla sintassi, vedere Sintassi dello schema di output. |
Sintassi dello schema di output
(
ColumnName :
ColumnType [,
...])
Per aggiungere tutte le colonne della tabella di input all'output del plug-in, usare un carattere jolly *
come primo parametro, come indicato di seguito:
(
*
,
ColumnName :
ColumnType [,
...])
Valori restituiti
Il bag_unpack
plug-in restituisce una tabella con il numero di record di input tabulare (T). Lo schema della tabella è uguale allo schema del relativo input tabulare con le modifiche seguenti:
- La colonna di input specificata (colonna) viene rimossa.
- Lo schema viene esteso con il numero di colonne con cui sono presenti slot distinti nei valori del contenitore delle proprietà di primo livello di T. Il nome di ogni colonna corrisponde al nome di ogni slot, facoltativamente preceduto da OutputColumnPrefix. Il tipo è il tipo dello slot, se tutti i valori dello stesso slot hanno lo stesso tipo o
dynamic
, se i valori sono diversi nel tipo.
Nota
Se outputSchema non è specificato, lo schema di output del plug-in varia in base ai valori dei dati di input. Pertanto, più esecuzioni del plug-in usando input di dati diversi, possono produrre uno schema di output diverso.
I dati di input per il plug-in devono essere in modo che lo schema di output segua tutte le regole per uno schema tabulare. In particolare:
Un nome di colonna di output non può essere uguale a una colonna esistente nell'input tabulare T, a meno che non sia la colonna da decomprimere (Colonna), perché produrrà due colonne con lo stesso nome.
Tutti i nomi degli slot, se preceduti da OutputColumnPrefix, devono essere nomi di entità validi e seguire le regole di denominazione degli identificatori.
I valori Null vengono ignorati.
Esempi
Espandere un sacchetto
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
Output
Età | Nome |
---|---|
20 | John |
40 | Dave |
30 | Gelsomino |
Espandere un contenitore con OutputColumnPrefix
Espandere un contenitore e usare l'opzione OutputColumnPrefix
per produrre nomi di colonna che iniziano con il prefisso "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 | Dave |
30 | Gelsomino |
Espandere un contenitore con colonneConflict
Espandere un contenitore e usare l'opzione columnsConflict
per risolvere i conflitti tra colonne e colonne esistenti generate dall'operatore 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
Età | Nome |
---|---|
20 | John |
40 | Dave |
30 | Gelsomino |
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
Età | Nome |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
Espandere un contenitore con proprietà ignorate
Espandere un contenitore e usare l'opzione ignoredProperties
per ignorare determinate proprietà nel contenitore delle proprietà.
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
Nome |
---|
John |
Dave |
Gelsomino |
Espandere un contenitore con outputschema definito da query
Espandere un contenitore e usare l'opzione OutputSchema
per consentire la valutazione di varie ottimizzazioni prima di eseguire la query effettiva.
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
Nome | Età |
---|---|
John | 20 |
Dave | 40 |
Gelsomino | 30 |
Espandere un contenitore e usare l'opzione OutputSchema
per consentire la valutazione di varie ottimizzazioni prima di eseguire la query effettiva. Utilizzare un carattere jolly *
per restituire tutte le colonne della tabella di input.
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
Descrizione | Name | Età |
---|---|---|
Student | John | 20 |
Docente | Dave | 40 |
Student | Gelsomino | 30 |