Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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|
evaluate
bag_unpack(
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 | Specificare i nomi e i tipi di colonna per l'output del plug-in bag_unpack . Per informazioni sulla sintassi, vedere Sintassi dello schema di output e per comprendere le implicazioni, vedere Considerazioni sulle prestazioni. |
Sintassi dello schema di output
(
ColumnName:
ColumnType [,
...])
Usare un carattere jolly *
come primo parametro per includere tutte le colonne della tabella di origine nell'output, come indicato di seguito:
(
*
,
ColumnName:
ColumnType [,
...])
Considerazioni sulle prestazioni
L'uso del plug-in senza outputSchema può avere gravi implicazioni sulle prestazioni in set di dati di grandi dimensioni e deve essere evitato.
La fornitura di un outputSchema consente al motore di query di ottimizzare l'esecuzione della query, in quanto può determinare lo schema di output senza dover analizzare e analizzare i dati di input. Ciò è utile quando i dati di input sono di grandi dimensioni o complessi. Vedere gli esempi con implicazioni sulle prestazioni dell'uso del plug-in con e senza un OutputSchema definito.
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.
- Il nome di ogni colonna corrisponde al nome di ogni slot, facoltativamente preceduto da OutputColumnPrefix.
- Il tipo di ogni colonna è il tipo dello slot, se tutti i valori dello stesso slot hanno lo stesso tipo o
dynamic
, se i valori differiscono nel tipo. - 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.
Nota
- Se non si specifica OutputSchema, lo schema di output del plug-in varia in base ai valori dei dati di input. Più esecuzioni del plug-in con input di dati diversi possono produrre schemi di output diversi.
- Se viene specificato un outputSchema , il plug-in restituisce solo le colonne definite nella sintassi dello schema di output, a meno che non venga usato un carattere jolly
*
. - Per restituire tutte le colonne dei dati di input e le colonne definite in OutputSchema, usare un carattere jolly
*
in OutputSchema.
Le regole dello schema tabulare si applicano ai dati di input. 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). In caso contrario, l'output include 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.
Il plug-in ignora i valori Null.
Esempi
Negli esempi di questa sezione viene illustrato come usare la sintassi per iniziare.
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)
Risultato
Età | Nome |
---|---|
20 | John |
40 | Dave |
30 | Gelsomino |
Espandere un contenitore e usare l'opzione OutputColumnPrefix
per produrre nomi di colonna con un prefisso:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')
Risultato
Property_Age | Property_Name |
---|---|
20 | John |
40 | Dave |
30 | Gelsomino |
Espandere un contenitore e usare l'opzione columnsConflict
per risolvere un conflitto di colonna tra la colonna dinamica e la colonna esistente:
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
Risultato
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
Risultato
Età | Nome |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
Espandere un contenitore e usare l'opzione ignoredProperties
per ignorare 2 delle 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']))
Risultato
Nome |
---|
John |
Dave |
Gelsomino |
Espandere un contenitore e usare l'opzione OutputSchema:
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)
Risultato
Nome | Età |
---|---|
John | 20 |
Dave | 40 |
Gelsomino | 30 |
Espandere un contenitore con un outputSchema e usare l'opzione con caratteri jolly*
:
Questa query restituisce la descrizione dello slot originale e le colonne definite in OutputSchema.
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20, "height":180}), "Student",
dynamic({"Name": "Dave", "Age":40, "height":160}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30, "height":172}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
Risultato
Descrizione | Nome | Età |
---|---|---|
Studente | John | 20 |
Docente | Dave | 40 |
Studente | Gelsomino | 30 |
Esempi con implicazioni sulle prestazioni
Espandere un contenitore con e senza un OutputSchema definito per confrontare le implicazioni per le prestazioni:
Questo esempio usa una tabella disponibile pubblicamente nel cluster della Guida. Nel database ContosoSales è presente una tabella denominata SalesDynamic. La tabella contiene dati sulle vendite e include una colonna dinamica denominata Customer_Properties.
Esempio senza schema di output: la prima query non definisce un outputSchema. La query richiede 5,84 secondi di CPU e analizza 36,39 MB di dati.
SalesDynamic | evaluate bag_unpack(Customer_Properties) | summarize Sales=sum(SalesAmount) by Country, State
Esempio con schema di output: la seconda query fornisce un outputSchema. La query richiede 0,45 secondi di CPU e analizza 19,31 MB di dati. La query non deve analizzare la tabella di input, risparmiando tempo di elaborazione.
SalesDynamic | evaluate bag_unpack(Customer_Properties) : (*, Country:string, State:string, City:string) | summarize Sales=sum(SalesAmount) by Country, State
Risultato
L'output è lo stesso per entrambe le query. Di seguito sono riportate le prime 10 righe dell'output.
Canada | Columbia Britannica | 56,101,083 |
---|---|---|
Regno Unito | Inghilterra | 77,288,747 |
Australia | Victoria | 31,242,423 |
Australia | Queensland | 27,617,822 |
Australia | Australia Meridionale | 8,530,537 |
Australia | Nuovo Galles meridionale | 54,765,786 |
Australia | Tasmania | 3,704,648 |
Canada | Alberta | 375,061 |
Canada | Ontario | 38,282 |
Stati Uniti | Washington | 80,544,870 |
... | ... | ... |