Sdílet prostřednictvím


Modul plug-in bag_unpack

Přepněte služby pomocí rozevíracího seznamu Verze . Přečtěte si další informace o navigaci.
Platí pro: ✅ Microsoft Fabric ✅ Azure 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|evaluatebag_unpack( Column [,OutputColumnPrefix ] [,columnsConflict ] [,ignoredProperties ] ) [:OutputSchema]

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

Parametry

Název Typ 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 Zadejte názvy a typy sloupců pro výstup modulu plug-in bag_unpack . Informace o syntaxi najdete v tématu Syntaxe schématu výstupu a vysvětlení dopadů najdete v tématu Aspekty výkonu.

Syntaxe výstupního schématu

( ColumnName:ColumnType [, ...])

Jako první parametr použijte zástupný znak * , který do výstupu zahrne všechny sloupce zdrojové tabulky, a to následujícím způsobem:

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

Důležité informace o výkonu

Použití modulu plug-in bez outputSchema může mít závažný dopad na výkon u velkých datových sad a mělo by se jim vyhnout.

Poskytnutí outputSchema umožňuje dotazovacímu stroji optimalizovat provádění dotazu, protože může určit výstupní schéma, aniž by bylo nutné analyzovat a analyzovat vstupní data. VýstupSchema je výhodný, když jsou vstupní data velká nebo složitá. Podívejte se na příklady s dopadem na výkon používání modulu plug-in s definovaným outputSchema a bez definovaného výstupu.

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.
  • Název každého sloupce odpovídá názvu každého slotu, volitelně s předponou OutputColumnPrefix.
  • Typ každého sloupce je buď typ slotu, pokud všechny hodnoty stejného slotu mají stejný typ, nebo dynamic, pokud se hodnoty liší v typu.
  • Schéma je rozšířeno o tolik sloupců, kolik existuje jedinečných slotů v hodnotách kontejneru vlastností nejvyšší úrovně T.

Poznámka:

  • Pokud nezadáte OutputSchema, schéma výstupu modulu plug-in se liší v závislosti na vstupních hodnotách dat. Několik spuštění modulu plug-in s různými datovými vstupy může vytvořit různá výstupní schémata.
  • Pokud je zadán outputSchema , modul plug-in vrátí pouze sloupce definované v syntaxi výstupního schématu, pokud se nepoužije zástupný znak * .
  • Pokud chcete vrátit všechny sloupce vstupních dat a sloupce definované v outputSchema, použijte zástupný znak * v outputSchema.

Pravidla tabulkového schématu se vztahují na vstupní data. 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). V opačném případě výstup obsahuje 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.

Modul plug-in ignoruje hodnoty null.

Příklady

Příklady v této části ukazují, jak používat syntaxi, která vám pomůže začít.

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

Age Name
20 John
40 Dave
30 Jasmín

Rozbalte tašku a použijte OutputColumnPrefix možnost vytvořit názvy sloupců s předponou:

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

Rozbalte tašku a pomocí columnsConflict možnosti vyřešte konflikt mezi dynamickým sloupcem a existujícím sloupcem:

datatable(Name:string, d:dynamic)
[
    'James', dynamic({"Name": "John", "Age":20}),
    'David', dynamic({ "Age":40}),
    'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Replace old column Name by new column

Výstup

Name Age
John 20
40
Jasmín 30
datatable(Name:string, d:dynamic)
[
    'James', dynamic({"Name": "John", "Age":20}),
    'David', dynamic({"Name": "Dave", "Age":40}),
    'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old column Name

Výstup

Name Age
Jakub 20
David 40
Emílie 30

Rozbalte tašku a použijte ignoredProperties možnost ignorovat 2 z vlastností v pytli 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
Jasmín

Rozbalte tašku a použijte možnost OutputSchema:

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

Výstup

Age Height Name
20 John
40 170 Dave
30 Jasmín

Rozbalte tašku pomocí outputSchema a použijte možnost se zástupným znakem*:

Tento dotaz vrátí původní popis slotu a sloupce definované v 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)

Výstup

Popis Name Age
Studenti John 20
Učitel Dave 40
Studenti Jasmín 30

Příklady s dopadem na výkon

Rozbalte tašku s definovaným výstupem a bez definovaného výstupu , abyste mohli porovnat dopad na výkon:

Tento příklad používá veřejně dostupnou tabulku v clusteru nápovědy. V databázi ContosoSales je tabulka s názvem SalesDynamic. Tabulka obsahuje data o prodeji a obsahuje dynamický sloupec s názvem Customer_Properties.

Snímek obrazovky tabulky SalesDynamic se zvýrazněným sloupcem vlastností zákazníka

  • Příklad bez výstupního schématu: První dotaz nedefinuje outputSchema. Dotaz trvá 5,84 sekund procesoru a prohledá 36,39 MB dat.

    SalesDynamic
    | evaluate bag_unpack(Customer_Properties) 
    | summarize Sales=sum(SalesAmount) by Country, State
    
  • Příklad s výstupním schématem: Druhý dotaz poskytuje outputSchema. Dotaz trvá 0,45 sekund procesoru a prohledá 19,31 MB dat. Dotaz nemusí analyzovat vstupní tabulku, což šetří čas zpracování.

    SalesDynamic
    | evaluate bag_unpack(Customer_Properties) :  (*, Country:string, State:string, City:string)
    | summarize Sales=sum(SalesAmount) by Country, State
    

Výstup

Výstup je stejný pro oba dotazy. Níže je zobrazeno prvních 10 řádků výstupu.

Country/Region State Sales
Kanada Britská Kolumbie 56,101,083
Spojené království Anglie 77,288,747
Austrálie Viktorie 31,242,423
Austrálie Queensland 27,617,822
Austrálie Jižní Austrálie 8,530,537
Austrálie Nový Jižní Wales 54,765,786
Austrálie Tasmánie 3,704,648
Kanada Alberta 375,061
Kanada Ontario 38,282
USA Washingtonský 80,544,870
... ... ...