mv-apply operátor
Minden rekordra alkalmaz egy-egy al lekérdezést, és visszaadja az összes albekérdezés eredményének egyesítését.
Tegyük fel például, hogy egy tábla T
olyan típusú dynamic
oszlopot Metric
tartalmaz, amelynek értékei számok tömbjeireal
. Az alábbi lekérdezés megkeresi az egyes Metric
értékek két legnagyobb értékét, és visszaadja az ezeknek az értékeknek megfelelő rekordokat.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
Az mv-apply
operátor a következő feldolgozási lépésekkel rendelkezik:
- Az operátor használatával
mv-expand
a bemenet minden rekordját altáblákká bontja (a sorrend megmarad). - Az altáblákra alkalmazza az al lekérdezéseket.
- Nulla vagy több oszlopot ad hozzá az eredményként kapott altáblához. Ezek az oszlopok a nem kibontott forrásoszlopok értékeit tartalmazzák, és szükség esetén ismétlődnek.
- Az eredmények egyesítését adja vissza.
Az mv-apply
operátor a következő bemeneteket kapja:
Egy vagy több kifejezés, amely dinamikus tömbökké bontható ki. Az egyes kibontott altáblák rekordjainak száma az egyes dinamikus tömbök maximális hossza. Null értékeket ad hozzá, ahol több kifejezés van megadva, és a megfelelő tömbök eltérő hosszúságúak.
Opcionálisan a kifejezések értékeinek kiosztásához szükséges nevek a bővítés után. Ezek a nevek lesznek az altáblák oszlopnevei. Ha nincs megadva, a rendszer az oszlop eredeti nevét használja, ha a kifejezés egy oszlophivatkozás. Ellenkező esetben véletlenszerű nevet használunk.
Megjegyzés
Ajánlott az alapértelmezett oszlopneveket használni.
A dinamikus tömbök elemeinek adattípusai a bővítés után. Ezek lesznek az altáblák oszloptípusai. Ha nincs megadva,
dynamic
akkor a rendszer használja.Opcionálisan az altáblákhoz hozzáadni kívánt oszlop neve, amely megadja a tömb azon elemének 0-alapú indexét, amely az altáblarekordot eredményezte.
Igény szerint a kibontandó tömbelemek maximális száma.
Az mv-apply
operátort az mv-expand
operátor általánosításának tekinthetjük (ez utóbbit az előbbi implementálhatja, ha az al lekérdezés csak előrejelzéseket tartalmaz.)
Syntax
T|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
SubQuery)
Ahol az ItemIndex szintaxisa van:
with_itemindex
=
IndexColumnName
A ColumnsToExpand az űrlap egy vagy több elemének vesszővel tagolt listája:
[Név=
] ArrayExpression [to
typeof
(
Typename)
]
A RowLimit egyszerűen:
limit
RowLimit
és a SubQuery bármely lekérdezési utasításnak ugyanaz a szintaxisa.
További információ a szintaxis konvenciókról.
Paraméterek
Név | Típus | Kötelező | Leírás |
---|---|---|---|
ItemIndex | string |
Egy olyan típusú long oszlop nevét jelzi, amely a tömbbővítési fázis részeként hozzá van fűzve a bemenethez, és a kibontott érték 0-alapú tömbindexét jelzi. |
|
Név | string |
Az egyes tömbbővített kifejezések tömbbővített értékeinek hozzárendeléséhez használni kívánt név. Ha nincs megadva, a rendszer az oszlop nevét használja, ha elérhető. Véletlenszerű név jön létre, ha az ArrayExpression nem egyszerű oszlopnév. | |
ArrayExpression | dynamic |
✔️ | Az a tömb, amelynek értékei tömbbővítettek. Ha a kifejezés a bemenet egyik oszlopának a neve, a bemeneti oszlop el lesz távolítva a bemenetből, és a kimenetben megjelenik egy új, azonos nevű oszlop( vagy ha meg van adva a ColumnName ). |
Típusnév | string |
Annak a típusnak a neve, amelyet a dynamic TömbExpression tömb egyes elemei figyelembe vesznek. Az ilyen típusú elemeket null érték váltja fel. Ha nincs meghatározva, dynamic alapértelmezés szerint a rendszer használja. |
|
RowLimit | int |
A bemenet egyes rekordjaiból létrehozandó rekordok számának korlátja. Ha nincs meghatározva, 2147483647 lesz használva. | |
Allekérdezés | string |
Táblázatos lekérdezési kifejezés implicit táblázatos forrással, amely minden tömbtel kibontott altáblára alkalmazva lesz. |
Megjegyzés
mv-expand
Az operátortól eltérően az operátor nem támogatja bagexpand=array
a mv-apply
bővítést. Ha a kibontandó kifejezés nem tömb, hanem tulajdonságcsomag, használhat belső mv-expand
operátort (lásd az alábbi példát).
Példák
A legnagyobb elem lekérése a tömbből
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
)
Kimenet
xMod2 |
l | Elem |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
A tömb két legnagyobb elemének összegének kiszámítása
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)
)
Kimenet
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Elemek kijelölése tömbökben
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)
)
Kimenet
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] |
A tömb with_itemindex
egy részhalmazának használata
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
Kimenet
index | Elem |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Mutiple-oszlopok használata 2 tömb elemeinek összekapcsolásához
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)
)
Kimenet
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 alkalmazása tulajdonságcsomagra
Az alábbi példában mv-apply
egy belsővel mv-expand
kombinálva eltávolítjuk az "555" karakterrel nem kezdődő értékeket egy tulajdonságzsákból:
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
Kimenet
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" } |
Kapcsolódó tartalom
- mv-expand operátor
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: