Modul plug-in bag_unpack

Modul bag_unpack plug-in rozbalí jeden sloupec typu dynamictak, že každý slot kontejneru vlastností nejvyšší úrovně považuje za sloupec. Modul plug-in se vyvolá pomocí operátoru evaluate .

Syntax

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

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
T string ✔️ Tabulkový vstup, jehož sloupec Column má být rozbalen.
Sloupec dynamic ✔️ Sloupec T , který chcete rozbalit.
OutputColumnPrefix string Společná předpona, která se přidá ke všem sloupcům vytvořeným modulem plug-in.
columnsConflict string Směr řešení konfliktů sloupců. Platné hodnoty:
error – Dotaz vygeneruje chybu (výchozí)
replace_source - Zdrojový sloupec je nahrazen.
keep_source - Zdrojový sloupec je zachován.
ignoredVlastnosti dynamic Volitelná sada vlastností bag, které se mají ignorovat. }
OutputSchema Názvy a typy očekávaných sloupců výstupu modulu plug-in bag_unpack Zadání očekávaného schématu optimalizuje provádění dotazů, protože není nutné nejprve spustit skutečný dotaz, aby se schéma prozkoumalo. Informace o syntaxi najdete v tématu Syntaxe výstupního schématu.

Syntaxe výstupního schématu

(Columnname:Typ sloupce [, ...] )

Pokud chcete do výstupu modulu plug-in přidat všechny sloupce vstupní tabulky, použijte jako první parametr zástupný * znak, a to následujícím způsobem:

(*,Columnname:Typ sloupce [, ...] )

Návraty

Modul plug-in bag_unpack vrátí tabulku s tolika záznamy, kolik má tabulkový vstup (T). Schéma tabulky je stejné jako schéma jejího tabulkového vstupu s následujícími úpravami:

  • Zadaný vstupní sloupec (Column) se odebere.
  • Schéma je rozšířeno o tolik sloupců, kolik různých slotů v kontejneru vlastností nejvyšší úrovně T. Název každého sloupce odpovídá názvu každého slotu, volitelně s předponou OutputColumnPrefix. Jeho typ je buď typ slotu, pokud všechny hodnoty stejného slotu mají stejný typ, nebo dynamic, pokud se hodnoty liší typem.

Poznámka

Pokud není zadán OutputSchema , výstupní schéma modulu plug-in se liší podle hodnot vstupních dat. Proto více spuštění modulu plug-in s různými datovými vstupy může vytvořit odlišné výstupní schéma.

Poznámka

Vstupní data modulu plug-in musí být taková, aby výstupní schéma postupovat podle všech pravidel pro tabulkové schéma. Zejména jde o toto:

  • Název výstupního sloupce nemůže být stejný jako existující sloupec v tabulkovém vstupu T, pokud to není sloupec, který se má rozbalit (Column), protože vytvoří dva sloupce se stejným názvem.

  • Všechny názvy slotů, které mají předponu OutputColumnPrefix, musí být platné názvy entit a musí dodržovat pravidla pojmenování identifikátorů.

Příklady

Rozbalení tašky

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)

Výstup

Věk Name
20 John
40 Dave
30 Jasmine

Rozbalení tašky pomocí OutputColumnPrefix

Rozbalte tašku OutputColumnPrefix a pomocí možnosti vytvořte názvy sloupců, které začínají předponou "Property_".

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')

Výstup

Property_Age Property_Name
20 John
40 Dave
30 Jasmine

Rozbalení tašky pomocí sloupcůKonflikt

Rozbalte kontejner a pomocí columnsConflict možnosti vyřešte konflikty mezi existujícími sloupci a sloupci vytvořenými operátorem 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

Výstup

Věk Name
20 John
40 Dave
30 Jasmine
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

Výstup

Věk Name
20 Old_name
40 Old_name
30 Old_name

Rozbalení tašky pomocí ignoredVlastnosti

Rozbalte kontejner a použijte ignoredProperties možnost ignorovat určité vlastnosti v kontejneru vlastností.

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']))

Výstup

Name
John
Dave
Jasmine

Rozšíření tašky s využitím outputSchema definovaného dotazem

Rozbalte tašku OutputSchema a pomocí možnosti povolte vyhodnocení různých optimalizací před spuštěním vlastního dotazu.

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)

Výstup

Name Věk
John 20
Dave 40
Jasmine 30

Rozbalte tašku OutputSchema a pomocí možnosti povolte vyhodnocení různých optimalizací před spuštěním vlastního dotazu. Pomocí zástupného znaku * můžete vrátit všechny sloupce vstupní tabulky.

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)

Výstup

Popis Název Věk
Student John 20
Učitel Dave 40
Student Jasmine 30