Sdílet prostřednictvím


Operátor _mv-expand_

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 ✅ Azure Monitor ✅ Microsoft Sentinel

Rozšiřuje dynamická pole s více hodnotami nebo kontejnery vlastností do více záznamů.

mv-expand lze popsat jako opak operátorů agregace, které zabalí více hodnot do jednoho pole nebo kontejneru vlastností s dynamickým typem, například summarize ... make-list() a make-series. Každý prvek v poli (skalární) nebo vygeneruje nový záznam ve výstupu operátoru. Všechny sloupce vstupu, které nejsou rozbalené, se duplikují na všechny záznamy ve výstupu.

Syntax

T|mv-expand [(kind=bag | )] [arraywith_itemindex=IndexColumnName] ColumnName [to typeof(Typename)] [,ColumnName ...] [limitRowlimit]

T|mv-expand [(kind=bag | )] [arrayName=] ArrayExpression [to typeof(Typename)] [, [Name=] ArrayExpression [to typeof(Typename)] ...] [limitRowlimit]

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

Parameters

Name Typ Required Description
ColumnName, ArrayExpression string ✔️ Odkaz na sloupec nebo skalární výraz s hodnotou typu dynamic , která obsahuje pole nebo tašku vlastností. Jednotlivé prvky nejvyšší úrovně pole nebo kontejneru vlastností se rozbalí do více záznamů.
Když se použije ArrayExpression a název se nerovná žádnému názvu vstupního sloupce, rozbalená hodnota se ve výstupu rozšíří do nového sloupce. V opačném případě se stávající columnName nahradí.
Name string Název nového sloupce
Typename string ✔️ Určuje základní typ prvků pole, který se stane typem sloupce vytvořeného operátorem mv-expand . Operace použití typu je pouze přetypování a nezahrnuje analýzu ani převod typu. Prvky pole, které neodpovídají deklarovanému typu, se stanou null hodnotami.
RowLimit int Maximální počet řádků vygenerovaných z každého původního řádku. Výchozí hodnota je 2147483647. mvexpand je starší a zastaralá forma operátoru mv-expand. Starší verze má výchozí limit řádků 128.
IndexColumnName string Pokud with_itemindex je zadán, výstup obsahuje další sloupec s názvem IndexColumnName , který obsahuje index začínající na 0 položky v původní rozbalené kolekci.

Returns

Pro každý záznam ve vstupu vrátí operátor ve výstupu nula, jeden nebo mnoho záznamů, jak je určeno následujícím způsobem:

  1. Vstupní sloupce, které nejsou rozbalené, se zobrazí ve výstupu s jejich původní hodnotou. Pokud je jeden vstupní záznam rozbalený do více výstupních záznamů, hodnota se duplikuje na všechny záznamy.

  2. Pro každou hodnotu ColumnName nebo ArrayExpression , která je rozbalována, je počet výstupních záznamů určen pro každou hodnotu, jak je vysvětleno v režimech rozšíření. Pro každý vstupní záznam se vypočítá maximální počet výstupních záznamů. Všechna pole nebo kontejnery vlastností jsou rozbalené "paralelně", aby chybějící hodnoty (pokud existují) byly nahrazeny hodnotami null. Prvky se rozbalí do řádků v pořadí, v jakém se zobrazují v původním poli nebo sáček.

  3. Pokud je dynamická hodnota null, vytvoří se pro tuto hodnotu jeden záznam (null). Pokud je dynamická hodnota prázdným polem nebo taškou vlastností, pro tuto hodnotu se neprodukuje žádný záznam. V opačném případě se vytvoří tolik záznamů, kolik obsahuje prvky v dynamické hodnotě.

Rozbalené sloupce jsou typu dynamic, pokud nejsou explicitně zadány pomocí to typeof() klauzule.

Režimy rozšíření

Podporují se dva režimy rozšíření kontejneru vlastností:

  • kind=bag nebo bagexpansion=bag: Tašky na nemovitosti jsou rozšířeny na jednodávkové kontejnery majetku. Tento režim je výchozím režimem.
  • kind=arraynebo bagexpansion=array: Kontejnery vlastností jsou rozšířeny na[hodnot klíče, se dvěma prvky], což umožňuje jednotný přístup ke klíčům a hodnotám. Tento režim umožňuje například spuštění agregace s jedinečným počtem nad názvy vlastností.

Examples

Příklady v tomto článku používají veřejně dostupné tabulky v clusteru nápovědy, jako je StormEvents tabulka v databázi Ukázky.

Příklady v tomto článku používají veřejně dostupné tabulky, například Weather tabulku v galerii ukázek analýzy počasí. Možná budete muset změnit název tabulky v ukázkovém dotazu tak, aby odpovídal tabulce v pracovním prostoru.

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

Jeden sloupec – rozšíření pole

datatable (a: int, b: dynamic)
[
    1, dynamic([10, 20]),
    2, dynamic(['a', 'b'])
]
| mv-expand b

Output

a b
1 10
1 20
2 a
2 b

Jeden sloupec – rozbalení sáčku

Jednoduché rozšíření jednoho sloupce:

datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b

Output

a b
1 {"prop1": "a1"}
1 {"prop2": "b1"}
2 {"prop1": "a2"}
2 {"prop2": "b2"}

Jeden sloupec – rozšíření sáčku na páry klíč-hodnota

Jednoduché rozšíření tašky na páry klíč-hodnota:

datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand kind=array b 
| extend key = b[0], val=b[1]

Output

a b klíč val
1 ["prop1","a1"] prop1 a1
1 ["prop2","b1"] prop2 b1
2 ["prop1","a2"] prop1 a2
2 ["prop2","b2"] prop2 b2

Zazipované dva sloupce

Rozbalením dvou sloupců nejprve zkomprimujte příslušné sloupce a pak je rozbalte:

datatable (a: int, b: dynamic, c: dynamic)[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c

Output

a b c
1 {"prop1":"a"} 5
1 {"prop2":"b"} 4
1 3

Kartézský součin dvou sloupců

Pokud chcete získat kartézský součin rozbalení dvou sloupců, rozbalte jeden za druhým:

datatable (a: int, b: dynamic, c: dynamic)
[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c

Output

a b c
1 { "prop1": "a"} 5
1 { "prop1": "a"} 6
1 { "prop2": "b"} 5
1 { "prop2": "b"} 6

Převod výstupu

Pokud chcete vynutit výstup mv-expand na určitý typ (výchozí hodnota je dynamická), použijte to typeof:

datatable (a: string, b: dynamic, c: dynamic)[
    "Constant", dynamic([1, 2, 3, 4]), dynamic([6, 7, 8, 9])
]
| mv-expand b, c to typeof(int)
| getschema 

Output

ColumnName ColumnOrdinal DateType ColumnType
a 0 System.String string
b 1 System.Object dynamic
c 2 System.Int32 int

Všimněte si, že sloupec b je vrácen, zatímco dynamicc je vrácen jako int.

Použití with_itemindex

Rozšíření pole s with_itemindex:

range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x

Output

x Index
1 0
2 1
3 2
4 3