operator mv-apply
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
Hiermee wordt een subquery toegepast op elke record en wordt de samenvoeging van de resultaten van alle subquery's geretourneerd.
Stel dat een tabel T
een kolom Metric
van het type dynamic
waarvan de waarden matrices van real
getallen zijn. De volgende query zoekt de twee grootste waarden in elke Metric
waarde en retourneert de records die overeenkomen met deze waarden.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
De operator mv-apply
heeft de volgende verwerkingsstappen:
- Gebruikt de operator
mv-expand
om elke record in de invoer in subtabellen uit te vouwen (volgorde blijft behouden). - Hiermee wordt de subquery toegepast voor elk van de subtabellen.
- Voegt nul of meer kolommen toe aan de resulterende subtabel. Deze kolommen bevatten de waarden van de bronkolommen die niet zijn uitgevouwen en worden waar nodig herhaald.
- Retourneert de samenvoeging van de resultaten.
De operator mv-apply
haalt de volgende invoer op:
Een of meer expressies die worden geëvalueerd in dynamische matrices om uit te vouwen. Het aantal records in elke uitgevouwen subtabel is de maximale lengte van elk van deze dynamische matrices. Null-waarden worden toegevoegd waarbij meerdere expressies worden opgegeven en de bijbehorende matrices verschillende lengten hebben.
Optioneel, de namen om de waarden van de expressies toe te wijzen na uitbreiding. Deze namen worden de kolomnamen in de subtabellen. Als deze niet is opgegeven, wordt de oorspronkelijke naam van de kolom gebruikt wanneer de expressie een kolomreferentie is. Anders wordt een willekeurige naam gebruikt.
Notitie
Het is raadzaam om de standaardkolomnamen te gebruiken.
De gegevenstypen van de elementen van deze dynamische matrices, na uitbreiding. Dit worden de kolomtypen van de kolommen in de subtabellen. Als dit niet is opgegeven, wordt
dynamic
gebruikt.Optioneel, de naam van een kolom die moet worden toegevoegd aan de subtabellen die de op 0 gebaseerde index van het element in de matrix specificeert, wat heeft geresulteerd in de subtabelrecord.
Eventueel het maximum aantal matrixelementen dat moet worden uitgebreid.
De operator mv-apply
kan worden beschouwd als een generalisatie van de operator mv-expand
(in feite kan deze worden geïmplementeerd door de voormalige operator, als de subquery alleen projecties bevat.)
Syntaxis
T|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
SubQuery-)
Waar ItemIndex de syntaxis heeft:
with_itemindex
=
IndexColumnName
ColumnsToExpand is een door komma's gescheiden lijst met een of meer elementen van het formulier:
[Name=
] ArrayExpression [to
typeof
(
Typename)
]
RowLimit is simpelweg:
limit
RowLimit-
en SubQuery- heeft dezelfde syntaxis van een query-instructie.
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
ItemIndex | string |
Geeft de naam aan van een kolom van het type long die als onderdeel van de matrixuitbreidingsfase is toegevoegd aan de invoer en geeft de matrixindex op basis van 0 van de uitgebreide waarde aan. |
|
naam | string |
De naam voor het toewijzen van de matrix uitgevouwen waarden van elke matrix uitgevouwen expressie. Als deze niet is opgegeven, wordt de naam van de kolom gebruikt, indien beschikbaar. Er wordt een willekeurige naam gegenereerd als MatrixExpression- geen eenvoudige kolomnaam is. | |
matrixexpressie | dynamic |
✔️ | De matrix waarvan de waarden zijn uitgevouwen. Als de expressie de naam is van een kolom in de invoer, wordt de invoerkolom verwijderd uit de invoer en een nieuwe kolom met dezelfde naam, of ColumnName indien opgegeven, wordt weergegeven in de uitvoer. |
typenaam | string |
De naam van het type dat de afzonderlijke elementen van de dynamic matrix MatrixExpression nemen. Elementen die niet aan dit type voldoen, worden vervangen door een null-waarde. Als dit niet is opgegeven, wordt dynamic standaard gebruikt. |
|
RowLimit- | int |
Een limiet voor het aantal records dat moet worden gegenereerd op basis van elke record van de invoer. Als dit niet is opgegeven, wordt 2147483647 gebruikt. | |
SubQuery- | string |
Een tabellaire query-expressie met een impliciete tabellaire bron die wordt toegepast op elke matrix uitgevouwen subtabel. |
Notitie
In tegenstelling tot de operator mv-expand
biedt de operator mv-apply
geen ondersteuning voor bagexpand=array
uitbreiding. Als de expressie die moet worden uitgevouwen een eigenschapsverzameling is en geen matrix, kunt u een operator voor binnenste mv-expand
gebruiken (zie het onderstaande voorbeeld).
Voorbeelden
Bekijk de voorbeelden en voer ze uit op uw Data Explorer-querypagina.
Het grootste element uit de matrix ophalen
De query voert het kleinste even getal (2) en het kleinste oneven getal (1) uit.
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
)
uitvoer
xMod2 |
l | element |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
De som van de grootste twee elementen in een matrix berekenen
De query voert de som uit van de bovenste 2 even getallen (6 + 8 = 14) en de som van de top 2 oneven getallen (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)
)
uitvoer
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Elementen selecteren in matrices
De query identificeert de bovenste 2 elementen van elke dynamische matrix op basis van de Arr2-waarden en vat deze samen in nieuwe lijsten.
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)
)
uitvoer
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] |
with_itemindex
gebruiken voor het werken met een subset van de matrix
De query resulteert in een tabel met rijen waarvan de index 3 of hoger is, inclusief de index- en elementwaarden uit de oorspronkelijke lijsten met even en oneven getallen.
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
uitvoer
index | element |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Mutiple-kolommen gebruiken om het element van twee matrices samen te voegen
De query combineert elementen van twee dynamische matrices in een nieuwe samengevoegde indeling en vat deze vervolgens samen in lijsten.
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)
)
uitvoer
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"] |
Mv-apply toepassen op een eigenschappentas
Met deze query worden eigenschappen dynamisch verwijderd uit het ingepakte waardenobject op basis van de criteria die hun waarden niet beginnen met '555'. Het uiteindelijke resultaat bevat de oorspronkelijke kolommen met ongewenste eigenschappen die zijn verwijderd.
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
uitvoer
Bronnummer | TargetNumber | CharsCount | waarden |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |
Verwante inhoud
- operator voor mv-expand