Operátor mv-apply
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Použije poddotaz na každý záznam a vrátí sjednocení výsledků všech poddotazů.
Předpokládejme například, že tabulka T
obsahuje sloupec Metric
typu dynamic
, jehož hodnoty jsou matice čísel real
. Následující dotaz vyhledá dvě největší hodnoty v každé Metric
hodnotě a vrátí záznamy odpovídající těmto hodnotám.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
Operátor mv-apply
má následující kroky zpracování:
- Pomocí operátoru
mv-expand
rozbalí každý záznam ve vstupu do dílčích tabulek (pořadí se zachová). - Použije poddotaz pro každou z dílčích tabulek.
- Přidá do výsledné podtable nuly nebo více sloupců. Tyto sloupce obsahují hodnoty zdrojových sloupců, které nejsou rozbalené, a v případě potřeby se opakují.
- Vrátí sjednocení výsledků.
Operátor mv-apply
získá následující vstupy:
Jeden nebo více výrazů, které se vyhodnocují do dynamických polí, které se mají rozšířit. Počet záznamů v každé rozbalené podtable je maximální délka každého z těchto dynamických polí. Hodnoty null se přidají tam, kde je zadáno více výrazů a odpovídající pole mají různé délky.
Volitelně můžete názvy, které se mají přiřadit hodnoty výrazů po rozbalení. Tyto názvy se stanou názvy sloupců v podtables. Pokud není zadaný, použije se původní název sloupce, pokud je výraz odkazem na sloupec. V opačném případě se použije náhodný název.
Poznámka:
Doporučujeme použít výchozí názvy sloupců.
Datové typy prvků těchto dynamických polí po rozšíření. Z těchto sloupců se stanou typy sloupců v podtables. Pokud není zadáno,
dynamic
použije se.Volitelně můžete název sloupce přidat do podřízených tabulek, který určuje index založený na 0 prvku v poli, který způsobil záznam podtable.
Volitelně můžete rozbalit maximální počet prvků pole.
Operátor mv-apply
lze považovat za zobecnění operátoru mv-expand
(ve skutečnosti může být implementováno dřívějším operátorem, pokud poddotaz zahrnuje pouze projekce.)
Syntaxe
T |
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
SubQuery )
Kde ItemIndex má syntaxi:
with_itemindex
=
IndexColumnName
ColumnsToExpand je čárkami oddělený seznam jednoho nebo více prvků formuláře:
[Name] ArrayExpression [to
(
typeof
Typename] =
)
RowLimit je jednoduše:
limit
RowLimit
a SubQuery mají stejnou syntaxi jako všechny příkazy dotazu.
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
ItemIndex | string |
Označuje název sloupce typu long , který je připojen ke vstupu jako součást fáze rozšíření pole a označuje 0-based index matice rozšířené hodnoty. |
|
Název | string |
Název pro přiřazení hodnot rozbalených matici každého výrazu s rozbaleným polem. Pokud není zadaný, použije se název sloupce, pokud je k dispozici. Náhodný název se vygeneruje, pokud ArrayExpression není jednoduchý název sloupce. | |
ArrayExpression | dynamic |
✔️ | Jedná se o matici, jejíž hodnoty jsou rozbalené. Pokud je výrazem název sloupce ve vstupu, vstupní sloupec se ze vstupu odebere a ve výstupu se zobrazí nový sloupec se stejným názvem nebo sloupec ColumnName ( pokud je zadaný). |
Název typu | string |
Název typu, který jednotlivé prvky dynamic pole ArrayExpression vezme. Prvky, které nevyhovují tomuto typu, se nahradí hodnotou null. Pokud není zadaný, dynamic použije se ve výchozím nastavení. |
|
RowLimit | int |
Limit počtu záznamů, které se mají vygenerovat z každého záznamu vstupu. Pokud není zadaný, použije se 2147483647. | |
Poddotaz | string |
Výraz tabulkového dotazu s implicitní tabulkovým zdrojem, který se použije pro každou podtable rozbalenou maticí. |
Poznámka:
Na rozdíl od operátoru mv-expand
mv-apply
operátor nepodporuje bagexpand=array
rozšíření. Pokud výraz, který se má rozšířit, je taška vlastností, nikoli pole, můžete použít vnitřní mv-expand
operátor (viz příklad níže).
Příklady
Získání největšího prvku z pole
let _data =
range x from 1 to 8 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply element=l to typeof(long) on
(
top 1 by element
)
Výstup
xMod2 |
l | – element |
---|---|---|
0 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Výpočet součtu největších dvou prvků v matici
let _data =
range x from 1 to 8 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply l to typeof(long) on
(
top 2 by l
| summarize SumOfTop2=sum(l)
)
Výstup
xMod2 |
l | SumOfTop2 |
---|---|---|
0 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Výběr prvků v polích
datatable (Val:int, Arr1:dynamic, Arr2:dynamic)
[ 1, dynamic(['A1', 'A2', 'A3']), dynamic([10, 30, 7]),
7, dynamic(['B1', 'B2', 'B5']), dynamic([15, 11, 50]),
3, dynamic(['C1', 'C2', 'C3', 'C4']), dynamic([6, 40, 20, 8])
]
| mv-apply NewArr1=Arr1, NewArr2=Arr2 to typeof(long) on (
top 2 by NewArr2
| summarize NewArr1=make_list(NewArr1), NewArr2=make_list(NewArr2)
)
Výstup
Val1 | Arr1 | Arr2 | NewArr1 |
NewArr2 |
---|---|---|---|---|
0 | ["A1","A2","A3"] | [10,30,7] | ["A2',"A1"] | [30,10] |
7 | ["B1","B2","B5"] | [15,11,50] | ["B5","B1"] | [50,15] |
3 | ["C1","C2","C3","C4"] | [6,40,20,8] | ["C2","C3"] | [40,20] |
Použití with_itemindex
pro práci s podmnožinou pole
let _data =
range x from 1 to 10 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply with_itemindex=index element=l to typeof(long) on
(
// here you have 'index' column
where index >= 3
)
| project index, element
Výstup
index | – element |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Použití ztlumených sloupců ke spojení prvku se 2 poli
datatable (Val: int, Arr1: dynamic, Arr2: dynamic)
[
1, dynamic(['A1', 'A2', 'A3']), dynamic(['B1', 'B2', 'B3']),
5, dynamic(['C1', 'C2']), dynamic(['D1', 'D2'])
]
| mv-apply Arr1, Arr2 on (
extend Out = strcat(Arr1, "_", Arr2)
| summarize Arr1 = make_list(Arr1), Arr2 = make_list(Arr2), Out= make_list(Out)
)
Výstup
Val | Arr1 | Arr2 | Out |
---|---|---|---|
0 | ["A1","A2","A3"] | ["B1","B2","B3"] | ["A1_B1","A2_B2","A3_B3"] |
5 | ["C1","C2"] | ["D1","D2"] | ["C1_D1","C2_D2"] |
Použití mv-apply na tašku vlastností
V následujícím příkladu se používá v kombinaci s vnitřní mv-expand
odebráním hodnot, mv-apply
které nezačíná na 555 z tašky vlastností:
datatable(SourceNumber: string, TargetNumber: string, CharsCount: long)
[
'555-555-1234', '555-555-1212', 46,
'555-555-1212', '', int(null)
]
| extend values = pack_all()
| mv-apply removeProperties = values on
(
mv-expand kind = array values
| where values[1] !startswith "555"
| summarize propsToRemove = make_set(values[0])
)
| extend values = bag_remove_keys(values, propsToRemove)
| project-away propsToRemove
Výstup
SourceNumber | Cílové číslo | CharsCount | hodnoty |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |
Související obsah
- mv-expand – operátor