operator mv-apply
Past een subquery toe op elke record en retourneert de samenvoeging van de resultaten van alle subquery's.
Stel dat een tabel T
een kolom Metric
van het type dynamic
heeft 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 mv-apply
operator heeft de volgende verwerkingsstappen:
- Hiermee wordt de
mv-expand
operator gebruikt om elke record in de invoer uit te breiden naar subtabellen (volgorde blijft behouden). - Past de subquery toe op elk van de subtabellen.
- Hiermee voegt u nul of meer kolommen toe aan de resulterende subtabel. Deze kolommen bevatten de waarden van de bronkolommen die niet zijn uitgevouwen en waar nodig worden herhaald.
- Retourneert de samenvoeging van de resultaten.
De mv-apply
operator krijgt de volgende invoer:
Een of meer expressies die resulteren 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 wanneer meerdere expressies zijn 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 dit 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 wordt aanbevolen 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. Indien niet opgegeven,
dynamic
wordt gebruikt.Optioneel de naam van een kolom die moet worden toegevoegd aan de subtabellen die de op 0 gebaseerde index aangeeft van het element in de matrix die heeft geresulteerd in de subtabelrecord.
Optioneel, het maximum aantal matrixelementen dat u wilt uitvouwen.
De mv-apply
operator kan worden gezien als een generalisatie van de mv-expand
operator (in feite kan de laatste worden geïmplementeerd door de eerste, als de subquery alleen projecties bevat.)
Syntax
T|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
SubQuery)
Waarbij ItemIndex de syntaxis heeft:
with_itemindex
=
IndexColumnName
ColumnsToExpand is een door komma's gescheiden lijst met een of meer elementen van het formulier:
[Naam=
] MatrixExpression [to
typeof
(
Typename)
]
RowLimit is simpelweg:
limit
Rijscheidingsteken
en SubQuery heeft dezelfde syntaxis als elke 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 aan de invoer wordt toegevoegd als onderdeel van de matrixuitbreidingsfase en geeft de matrixindex op basis van 0 van de uitgevouwen waarde aan. |
|
Naam | string |
De naam voor het toewijzen van de matrix-uitgevouwen waarden van elke matrix-uitgevouwen expressie. Als dit niet is opgegeven, wordt de naam van de kolom gebruikt, indien beschikbaar. Er wordt een willekeurige naam gegenereerd als ArrayExpression geen eenvoudige kolomnaam is. | |
MatrixExpression | dynamic |
✔️ | De matrix waarvan de waarden matrix-uitgevouwen zijn. Als de expressie de naam is van een kolom in de invoer, wordt de invoerkolom verwijderd uit de invoer en wordt een nieuwe kolom met dezelfde naam of ColumnName , indien opgegeven, weergegeven in de uitvoer. |
Typename | string |
De naam van het type dat door de afzonderlijke elementen van de dynamic matrix MatrixExpression wordt gebruikt. Elementen die niet aan dit type voldoen, worden vervangen door een null-waarde. Indien niet opgegeven, dynamic wordt standaard gebruikt. |
|
Rijscheidingsteken | int |
Een limiet voor het aantal records dat moet worden gegenereerd op basis van elke record van de invoer. Als dit niet wordt opgegeven, wordt 2147483647 gebruikt. | |
Subquery | string |
Een tabellaire queryexpressie met een impliciete tabellaire bron die wordt toegepast op elke uit een matrix uitgevouwen subtabel. |
Notitie
In tegenstelling tot de mv-expand
operator biedt de mv-apply
operator geen ondersteuning voor bagexpand=array
uitbreiding. Als de uit te breiden expressie een eigenschappenverzameling is en geen matrix, kunt u een inner mv-expand
operator gebruiken (zie het onderstaande voorbeeld).
Voorbeelden
Het grootste element uit de matrix ophalen
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 twee grootste elementen in een matrix berekenen
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 in matrices selecteren
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] |
Gebruiken with_itemindex
voor het werken met een subset van de matrix
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 |
Meerdere kolommen gebruiken om het element van 2 matrices samen te voegen
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 eigenschappenverzameling
In het volgende voorbeeld mv-apply
wordt gebruikt in combinatie met een binnenste mv-expand
om waarden te verwijderen die niet beginnen met '555' uit een eigenschappenverzameling:
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
SourceNumber | TargetNumber | Aantal tekens | values |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |
Gerelateerde inhoud
- mv-expand operator
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor