mv-apply işleci
Her kayda bir alt sorgu uygular ve tüm alt sorguların sonuçlarının birleşimini döndürür.
Örneğin, bir tablonun T
değerleri sayı dizisi olan bir tür dynamic
sütunu Metric
olduğunu real
varsayalım. Aşağıdaki sorgu her Metric
değerdeki en büyük iki değeri bulur ve bu değerlere karşılık gelen kayıtları döndürür.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
mv-apply
işleci aşağıdaki işleme adımlarına sahiptir:
- Girişteki
mv-expand
her kaydı alt tablolara genişletmek için işlecini kullanır (sıra korunur). - Alt tablolardan her biri için alt sorguyu uygular.
- Sonuçta elde edilen alt tabloya sıfır veya daha fazla sütun ekler. Bu sütunlar, genişletilmeyen kaynak sütunların değerlerini içerir ve gerektiğinde yinelenir.
- Sonuçların birleşimini döndürür.
mv-apply
işleci aşağıdaki girişleri alır:
Genişletilmesi için dinamik diziler olarak değerlendirilen bir veya daha fazla ifade. Genişletilmiş her alt tablodaki kayıt sayısı, bu dinamik dizilerin her birinin uzunluk üst sınırıdır. Birden çok ifadenin belirtildiği ve karşılık gelen dizilerin farklı uzunluklara sahip olduğu null değerler eklenir.
İsteğe bağlı olarak, genişletmeden sonra ifadelerin değerlerini atamak için adlar. Bu adlar, alt tablolardaki sütun adları olur. Belirtilmezse, ifade bir sütun başvurusu olduğunda sütunun özgün adı kullanılır. Aksi takdirde rastgele bir ad kullanılır.
Not
Varsayılan sütun adlarının kullanılması önerilir.
Genişletmeden sonra bu dinamik dizilerin öğelerinin veri türleri. Bunlar, alt tablolardaki sütunların sütun türleri haline gelir. Belirtilmezse
dynamic
kullanılır.İsteğe bağlı olarak, alt tablo kaydıyla sonuçlanan dizideki öğenin 0 tabanlı dizinini belirten alt tablolara eklenecek sütunun adı.
İsteğe bağlı olarak, genişletilmesi gereken dizi öğelerinin sayısı üst sınırıdır.
mv-apply
işleci, işlecin genelleştirmesi mv-expand
olarak düşünülebilir (aslında, alt sorgu yalnızca projeksiyonları içeriyorsa, ikincisi önceki tarafından uygulanabilir.)
Syntax
T|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
SubQuery)
ItemIndex söz dizimini içerir:
with_itemindex
=
IndexColumnName
ColumnsToExpand , formun bir veya daha fazla öğesinin virgülle ayrılmış listesidir:
[Ad=
] ArrayExpression [to
typeof
(
Typename)
]
RowLimit basitçe:
limit
RowLimit
ve SubQuery , herhangi bir sorgu deyiminin söz dizimini aynı şekilde gösterir.
Söz dizimi kuralları hakkında daha fazla bilgi edinin.
Parametreler
Ad | Tür | Gerekli | Açıklama |
---|---|---|---|
Itemındex | string |
Dizi genişletme aşamasının bir parçası olarak girişe eklenen türdeki long bir sütunun adını ve genişletilmiş değerin 0 tabanlı dizi dizinini gösterir. |
|
Ad | string |
Dizi genişletilmiş her ifadenin dizi genişletilmiş değerlerini atama adı. Belirtilmezse, varsa sütunun adı kullanılır. ArrayExpression basit bir sütun adı değilse rastgele bir ad oluşturulur. | |
ArrayExpression | dynamic |
✔️ | Değerleri dizi genişletilmiş olan dizi. İfade girişteki bir sütunun adıysa, giriş sütunu girişten kaldırılır ve çıkışta aynı ada sahip yeni bir sütun veya belirtilirse ColumnName görüntülenir. |
Typename | string |
ArrayExpression dizisinin tek tek öğelerinin alması gereken türün dynamic adı. Bu türe uymayan öğeler null değerle değiştirilir. Belirtilmemişse, dynamic varsayılan olarak kullanılır. |
|
RowLimit | int |
Girişin her kaydından oluşturulacak kayıt sayısı sınırı. Belirtilmemişse 2147483647 kullanılır. | |
Subquery | string |
Dizi genişletilmiş her alt tabloya uygulanan örtük bir tablosal kaynağa sahip tablosal sorgu ifadesi. |
Not
işlecinden mv-expand
farklı olarak, işleç genişletmeyi mv-apply
desteklemez bagexpand=array
. Genişletilecek ifade bir dizi değil bir özellik paketiyse, bir iç mv-expand
işleç kullanabilirsiniz (aşağıdaki örne bakın).
Örnekler
Diziden en büyük öğeyi alma
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
)
Çıkış
xMod2 |
l | öğesi |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Dizideki en büyük iki öğe toplamını hesaplama
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)
)
Çıkış
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Dizilerdeki öğeleri seçme
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)
)
Çıkış
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] |
Dizinin bir alt kümesiyle çalışmak için kullanma with_itemindex
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
Çıkış
dizin | öğesi |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
2 dizinin öğesini birleştirmek için mutiple sütunlarını kullanma
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)
)
Çıkış
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"] |
Bir özellik paketine mv-apply uygulama
Aşağıdaki örnekte, mv-apply
bir özellik paketinden "555" ile başlamayen değerleri kaldırmak için iç ile mv-expand
birlikte kullanılır:
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
Çıkış
SourceNumber | TargetNumber | CharsCount | değerler |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |
İlgili içerik
- mv-expand işleci
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin