mv-apply-operator
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Tillämpar en underfråga på varje post och returnerar union av resultaten för alla underfrågor.
Anta till exempel att en tabell T
har en kolumn Metric
av typen dynamic
vars värden är matriser med real
tal. Följande fråga letar upp de två största värdena i varje Metric
värde och returnerar de poster som motsvarar dessa värden.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
Operatorn mv-apply
har följande bearbetningssteg:
- Använder operatorn
mv-expand
för att expandera varje post i indata till undertabeller (ordningen bevaras). - Tillämpar underfrågan för var och en av undertabellerna.
- Lägger till noll eller fler kolumner i den resulterande undertabellen. Dessa kolumner innehåller värdena för de källkolumner som inte expanderas och upprepas där det behövs.
- Returnerar resultatets union.
Operatorn mv-apply
hämtar följande indata:
Ett eller flera uttryck som utvärderas till dynamiska matriser för att expandera. Antalet poster i varje expanderad undertabell är den maximala längden för var och en av dessa dynamiska matriser. Null-värden läggs till där flera uttryck anges och motsvarande matriser har olika längd.
Du kan också tilldela namnen för att tilldela värdena för uttrycken efter expansionen. Dessa namn blir kolumnnamnen i undertabellerna. Om det inte anges används det ursprungliga namnet på kolumnen när uttrycket är en kolumnreferens. Ett slumpmässigt namn används annars.
Not
Vi rekommenderar att du använder standardkolumnnamnen.
Datatyperna för elementen i dessa dynamiska matriser efter expansionen. Dessa blir kolumntyperna för kolumnerna i undertabellerna. Om det inte anges används
dynamic
.Alternativt kan namnet på en kolumn som ska läggas till i undertabellerna som anger det 0-baserade indexet för elementet i matrisen som resulterade i den undertabellpost.
Du kan också utöka det maximala antalet matriselement.
Den mv-apply
operatorn kan betraktas som en generalisering av mv-expand
-operatorn (i själva verket kan den senare implementeras av den förra, om underfrågan endast innehåller projektioner.)
Syntax
T|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
SubQuery)
Där ItemIndex har syntaxen:
with_itemindex
=
IndexColumnName
ColumnsToExpand är en kommaavgränsad lista över ett eller flera element i formuläret:
[Name=
] ArrayExpression [to
typeof
(
Typename)
]
RowLimit är helt enkelt:
limit
RowLimit
och SubQuery har samma syntax för alla frågeuttryck.
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Krävs | Beskrivning |
---|---|---|---|
ItemIndex | string |
Anger namnet på en kolumn av typen long som läggs till i indata som en del av matrisexpansionsfasen och anger det 0-baserade matrisindexet för det expanderade värdet. |
|
namn | string |
Namnet för att tilldela matris expanderade värden för varje matrisut expanderat uttryck. Om det inte anges används namnet på kolumnen om det är tillgängligt. Ett slumpmässigt namn genereras om ArrayExpression inte är ett enkelt kolumnnamn. | |
ArrayExpression | dynamic |
✔️ | Matrisen vars värden är matris-expanderade. Om uttrycket är namnet på en kolumn i indata tas indatakolumnen bort från indata och en ny kolumn med samma namn, eller ColumnName- om det anges, visas i utdata. |
Typename | string |
Namnet på den typ som de enskilda elementen i den dynamic matrisen ArrayExpression ta. Element som inte överensstämmer med den här typen ersätts med ett null-värde. Om det är ospecificerat används dynamic som standard. |
|
RowLimit | int |
En gräns för hur många poster som ska genereras från varje post i indata. Om det är ospecificerat används 2147483647. | |
SubQuery | string |
Ett tabellfrågeuttryck med en implicit tabellkälla som tillämpas på varje matris expanderad undertabell. |
Not
Till skillnad från operatorn mv-expand
stöder mv-apply
-operatorn inte bagexpand=array
expansion. Om uttrycket som ska expanderas är en egenskapsuppsättning och inte en matris kan du använda en inre mv-expand
operator (se exemplet nedan).
Exempel
Granska exemplen och kör dem på datautforskarens frågesida.
Hämta det största elementet från matrisen
Frågan matar ut det minsta jämna talet (2) och det minsta udda talet (1).
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
)
utdata
xMod2 |
l | element |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Beräkna summan av de två största elementen i en matris
Frågan matar ut summan av de översta 2 jämna talen (6 + 8 = 14) och summan av de 2 främsta udda talen (5 + 7 = 12).
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)
)
utdata
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Välj element i matriser
Frågan identifierar de 2 översta elementen från varje dynamisk matris baserat på Arr2-värdena och sammanfattar dem i nya listor.
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)
)
utdata
Val1 | Arr1 | Arr2 | NewArr1 |
NewArr2 |
---|---|---|---|---|
1 | ["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] |
Använda with_itemindex
för att arbeta med en delmängd av matrisen
Frågan resulterar i en tabell med rader där indexet är 3 eller högre, inklusive index- och elementvärdena från de ursprungliga listorna med jämna och udda tal.
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
utdata
index | element |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Använda mutiple-kolumner för att koppla element i 2 matriser
Frågan kombinerar element från två dynamiska matriser till ett nytt sammanfogat format och sammanfattar dem sedan i listor.
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)
)
utdata
Val | Arr1 | Arr2 | Out |
---|---|---|---|
1 | ["A1","A2","A3"] | ["B1","B2","B3"] | ["A1_B1","A2_B2","A3_B3"] |
5 | ["C1","C2"] | ["D1","D2"] | ["C1_D1","C2_D2"] |
Tillämpa mv-apply på en egenskapsväska
Den här frågan tar dynamiskt bort egenskaper från objektet med packade värden baserat på villkoret att deras värden inte börjar med "555". Slutresultatet innehåller de ursprungliga kolumnerna med oönskade egenskaper borttagna.
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
utdata
SourceNumber | TargetNumber | CharsCount | värden |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |
Relaterat innehåll
- mv-expandering operator