Operátor mv-expand
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.
Syntaxe
T |mv-expand
[kind=
(bag
array
| )] [with_itemindex=
IndexColumnName] ColumnName [to typeof(
Typename)
] [,
ColumnName ...] [limit
Rowlimit]
T [(bag
| array
)] [kind=
Name=
] ArrayExpression [to typeof(
Typename)
] [,
[Name =
] ArrayExpression [to typeof(
Typename)
] ...] [limit
Rowlimit]|mv-expand
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
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í. |
Název | string |
Název nového sloupce | |
Název typu | 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. |
Návraty
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:
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.
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.
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
nebobagexpansion=bag
: Tašky na nemovitosti jsou rozšířeny na jednodávkové kontejnery majetku. Tento režim je výchozím režimem.kind=array
nebobagexpansion=array
: Kontejnery vlastností jsou rozšířeny na struktury pole 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í.
Příklady
Jeden sloupec – rozšíření pole
datatable (a: int, b: dynamic)
[
1, dynamic([10, 20]),
2, dynamic(['a', 'b'])
]
| mv-expand b
Výstup
d | b |
---|---|
1 | 10 |
0 | 20 |
2 | d |
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
Výstup
d | b |
---|---|
0 | {"prop1": "a1"} |
0 | {"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]
Výstup
d | b | key | Val |
---|---|---|---|
0 | ["prop1","a1"] | prop1 | a1 |
0 | ["prop2","b1"] | prop2 | b1 |
2 | ["prop1","a2"] | prop1 | a2 |
2 | ["prop2","b2"] | prop2 | b2 |
Zazipované dva sloupce
Rozbalením dvou sloupců nejprve zazipujte příslušné sloupce a pak je rozbalíte:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
Výstup
d | b | c |
---|---|---|
0 | {"prop1":"a"} | 5 |
0 | {"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
Výstup
d | b | c |
---|---|---|
0 | { "prop1": "a"} | 5 |
0 | { "prop1": "a"} | 6 |
0 | { "prop2": "b"} | 5 |
0 | { "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
Výstup
ColumnName | Sloupcový pořadový | Typ data | ColumnType |
---|---|---|---|
d | 0 | System.String | string |
b | 0 | System.Object | dynamic |
c | 2 | System.Int32 | int |
Všimněte si, že sloupec b
je vrácen, zatímco dynamic
c
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
Výstup
linka | Index |
---|---|
0 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Související obsah
- mv-apply – operátor.
- Opak operátoru mv-expand naleznete v části summarize make_list().
- Rozšíření dynamických objektů JSON do sloupců pomocí klíčů kontejneru vlastností najdete v modulu plug-in bag_unpack().