mv-apply-operatorn
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 flera 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.
Alternativt kan namnen som ska tilldelas värdena för uttrycken efter expansionen. Dessa namn blir kolumnnamnen i undertabellerna. Om inget anges används det ursprungliga namnet på kolumnen när uttrycket är en kolumnreferens. Ett slumpmässigt namn används annars.
Anteckning
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
dynamic
används.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.
Alternativt kan det maximala antalet matriselement som ska expanderas.
Operatorn mv-apply
kan betraktas som en generalisering av operatorn mv-expand
(i själva verket kan den senare implementeras av den förstnämnda, 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:
[Namn=
] 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 | Obligatorisk | 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 matris expanderat uttryck. Om inget 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 den anges, visas i utdata. |
Typename | string |
Namnet på den typ som de enskilda elementen i matrisen dynamic ArrayExpression tar. Element som inte överensstämmer med den här typen ersätts med ett null-värde. Om det är ospecificerat dynamic används 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. | |
Underfråga | string |
Ett tabellfrågeuttryck med en implicit tabellkälla som tillämpas på varje matris expanderad undertabell. |
Anteckning
Till skillnad från operatorn mv-expand
stöder bagexpand=array
operatorn mv-apply
inte 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
Hämta det största elementet från matrisen
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
)
Resultat
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
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)
)
Resultat
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Välj element i matriser
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)
)
Resultat
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
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
Resultat
index | element |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Använda stympade kolumner för att koppla element i 2 matriser
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)
)
Resultat
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 egenskapsuppsättning
I följande exempel mv-apply
används i kombination med ett inre mv-expand
för att ta bort värden som inte börjar med "555" från en egenskapsuppsättning:
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
Resultat
SourceNumber | TargetNumber | CharsCount | values |
---|---|---|---|
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
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för