Sdílet prostřednictvím


Modul plug-in bag_unpack

Platí pro: ✅Microsoft FabricAzure Data Explorer

Modul bag_unpack plug-in rozbalí jeden sloupec typu dynamic, tím, že zachází s jednotlivými kontejnery na nejvyšší úrovni kontejneru jako se sloupcem. Modul plug-in se vyvolá pomocí operátoru evaluate .

Syntaxe

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

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

Parametry

Název Type Požadováno Popis
T string ✔️ Tabulkový vstup, jehož sloupec Sloupec se má rozbalit.
Sloupec dynamic ✔️ Sloupec T k rozbalení.
OutputColumnPrefix string Společná předpona pro přidání do všech sloupců vytvořených modulem plug-in.
columnsConflict string Směr řešení konfliktů sloupců. Platné hodnoty:
error – Dotaz vytvoří chybu (výchozí)
replace_source - Zdrojový sloupec se nahradí.
keep_source – Zdrojový sloupec se uchovává.
ignoredProperties dynamic Volitelná sada vlastností tašky, které se mají ignorovat. }
OutputSchema Názvy a typy očekávaných sloupců výstupu bag_unpack modulu plug-in. Zadání očekávaného schématu optimalizuje provádění dotazů tím, že nemusí nejprve spustit skutečný dotaz, aby bylo možné schéma prozkoumat. Informace o syntaxi naleznete v tématu Syntaxe výstupního schématu.

Syntaxe výstupního schématu

(ColumnName : ColumnType [, ...])

Pokud chcete do výstupu modulu plug-in přidat všechny sloupce vstupní tabulky, použijte jako první parametr zástupný znak * :

(* , ColumnName : ColumnType [, ...])

Návraty

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

  • Zadaný vstupní sloupec (Sloupec) se odebere.
  • Schéma je rozšířeno o tolik sloupců, kolik existuje jedinečných slotů v hodnotách 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ší v typu.

Poznámka:

  • Pokud není zadaný outputSchema, výstupní schéma modulu plug-in se liší podle vstupních hodnot dat. Proto může více spuštění modulu plug-in pomocí různých datových vstupů vytvořit jiné výstupní schéma.

  • Vstupní data modulu plug-in musí být taková, že výstupní schéma dodržuje všechna pravidla 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 se nejedná o sloupec, který se má rozbalit (Sloupec), protože vytvoří dva sloupce se stejným názvem.

    • Všechny názvy slotů, pokud je předpona OutputColumnPrefix, musí být platné názvy entit a dodržovat pravidla pojmenování identifikátoru.

  • Hodnoty null se ignorují.

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 Název
20 John
40 Dave
30 Jasmín

Rozbalení tašky pomocí OutputColumnPrefixu

Rozbalte tašku a použijte OutputColumnPrefix možnost vytvořit 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 Jasmín

Rozbalení tašky pomocí sloupcůConflict

Rozbalte tašku a použijte columnsConflict možnost vyřešit 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 Název
20 John
40 Dave
30 Jasmín
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 Název
20 Old_name
40 Old_name
30 Old_name

Rozbalení tašky s ignorovanými funkcemiProperties

Rozbalte tašku 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

Název
John
Dave
Jasmín

Rozšíření tašky pomocí dotazu definovaného outputSchema

Rozbalte tašku a použijte OutputSchema možnost, aby se před spuštěním skutečného dotazu vyhodnotily různé optimalizace.

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

Název Věk
John 20
Dave 40
Jasmín 30

Rozbalte tašku a použijte OutputSchema možnost, aby se před spuštěním skutečného dotazu vyhodnotily různé optimalizace. 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 Name Věk
Student John 20
Teacher Dave 40
Student Jasmín 30