Plug-in bag_unpack

Il bag_unpack plug-in decomprime una singola colonna di tipo dynamic, trattando ogni slot di livello principale del contenitore di proprietà come colonna. Il plug-in viene richiamato con l'operatore evaluate .

Sintassi

T|evaluatebag_unpack(Column [,OutputColumnPrefix ] [,columnsConflict ] [,ignoredProperties ] ) [:OutputSchema]

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria Descrizione
T string ✔️ Input tabulare la cui colonna deve essere decompressa.
Colonna 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 sostituita
keep_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 bag_unpack plug-in. 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 [, ...] )

Restituisce

Il bag_unpack plug-in restituisce una tabella con un numero di record pari al relativo input tabulare (T). Lo schema della tabella è lo stesso dello schema del relativo input tabulare con le modifiche seguenti:

  • La colonna di input specificata (colonna) viene rimossa.
  • Lo schema viene esteso con tutte le colonne in 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 viene specificato, lo schema di output del plug-in varia in base ai valori dei dati di input. Pertanto, più esecuzioni del plug-in che usano input di dati diversi, possono produrre uno schema di output diverso.

Nota

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.

Esempio

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 Elena

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 Elena

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 Elena
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
Elena

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
Elena 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 Nome Età
Studente John 20
Insegnante Dave 40
Studente Elena 30