Operátor mv-expand
Rozbalí dynamická pole s více hodnotami nebo kontejnery vlastností do více záznamů.
mv-expand
lze popsat jako opak operátorů agregace, které sbalí více hodnot do jednoho pole nebo kontejneru vlastností dynamického typu, například summarize
... make-list()
a make-series
.
Každý prvek v (skalárním) poli nebo kontejneru vlastností generuje nový záznam ve výstupu operátoru . Všechny sloupce vstupu, které nejsou rozbalené, se duplikují do všech záznamů ve výstupu.
Syntax
T|mv-expand
[kind=
(bag
array
| )] [with_itemindex=
IndexColumnName] ColumnName [to typeof(
Typename)
] [,
ColumnName ...] [limit
Rowlimit]
T|mv-expand
[kind=
(bag
| array
)] [Název=
] ArrayExpression [to typeof(
Název_typu)
] [,
[Název=
] ArrayExpression [to typeof(
Název_typu)
] ...] [limit
Rowlimit]
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Typ | Vyžadováno | Popis |
---|---|---|---|
ColumnName, ArrayExpression | string |
✔️ | Odkaz na sloupec nebo skalární výraz s hodnotou typu dynamic , která obsahuje pole nebo kontejner 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, rozšířená hodnota se ve výstupu rozšíří do nového sloupce. V opačném případě se stávající sloupec ColumnName nahradí. |
Název | string |
Název nového sloupce | |
Typename | string |
✔️ | Označuje podkladový typ prvků pole, který se stane typem sloupce vytvořeného operátorem mv-expand . Operace použití typu je pouze přetypovaná a nezahrnuje parsování ani převod typu. Prvky pole, které neodpovídají deklarovanému typu, se stanou null hodnotami. |
Omezení řádků | 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. |
|
Názevsloupce indexu | 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í rozšířené kolekci. |
Návraty
Pro každý záznam ve vstupu vrátí operátor ve výstupu nula, jeden nebo více záznamů, jak je určeno následujícím způsobem:
Vstupní sloupce, které nejsou rozbalené, se ve výstupu zobrazí s 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ždý sloupec ColumnName nebo ArrayExpression , který je rozbalený, počet výstupních záznamů je 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ě" tak, aby chybějící hodnoty (pokud existují) byly nahrazeny hodnotami null. Prvky jsou rozbalené do řádků v pořadí, v jakém se zobrazují v původním poli nebo kontejneru.
Pokud je dynamická hodnota null, vytvoří se pro tuto hodnotu jeden záznam (null). Pokud je dynamickou hodnotou prázdné pole nebo kontejner vlastností, nevytvoře se pro tuto hodnotu žádný záznam. V opačném případě se vytvoří tolik záznamů, kolik je prvků v dynamické hodnotě.
Rozbalené sloupce jsou typu dynamic
, pokud nejsou explicitně zadány pomocí klauzule to typeof()
.
Režimy rozšíření
Podporují se dva režimy rozšíření kontejneru vlastností:
kind=bag
nebobagexpansion=bag
: Kontejnery vlastností jsou rozbalené do kontejneru vlastností s jednou položkou. Tento režim je výchozím režimem.kind=array
nebobagexpansion=array
: Kontejnery vlastností jsou rozbalené dostruktur polehodnot klíčů,
]
se dvěma prvky[
, což umožňuje jednotný přístup ke klíčům a hodnotám. Tento režim také umožňuje například spuštění agregace distinct-count pro 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
pro | b |
---|---|
1 | 10 |
1 | 20 |
2 | pro |
2 | b |
Jednosloupce - rozšíření 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
pro | b |
---|---|
1 | {"prop1": "a1"} |
1 | {"prop2": "b1"} |
2 | {"prop1": "a2"} |
2 | {"prop2": "b2"} |
Jeden sloupec – rozšíření sáčku do párů klíč-hodnota
Jednoduché rozšíření tašky o 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
pro | b | key | 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ů se nejprve "zazipují" příslušné sloupce a pak se rozbalí:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
Výstup
pro | 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 po 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
pro | b | c |
---|---|---|
1 | { "prop1": "a"} | 5 |
1 | { "prop1": "a"} | 6 |
1 | { "prop2": "b"} | 5 |
1 | { "prop2": "b"} | 6 |
Převést výstup
Pokud chcete vynutit výstup funkce 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 |
---|---|---|---|
pro | 0 | System.string | string |
b | 1 | System.Object | dynamic |
c | 2 | System.Int32 | int |
Sloupec b
oznámení se vrátí jako dynamic
, zatímco c
sloupec se vrátí jako int
.
Používání with_itemindex
Rozšíření pole pomocí with_itemindex
:
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
Výstup
x | Index |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Související obsah
- Další příklady najdete v tématu Graf počtu živých aktivit v průběhu času.
- mv-apply – operátor.
- Opakem operátoru mv-expand je shrnutí make_list().
- Informace o rozšíření dynamických objektů JSON do sloupců pomocí klíčů kontejneru vlastností najdete v modulu plug-in bag_unpack().
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro