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:

  1. Girişteki mv-expand her kaydı alt tablolara genişletmek için işlecini kullanır (sıra korunur).
  2. Alt tablolardan her biri için alt sorguyu uygular.
  3. 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.
  4. Sonuçların birleşimini döndürür.

mv-apply işleci aşağıdaki girişleri alır:

  1. 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.

  2. İ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.

  3. 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.

  4. İsteğe bağlı olarak, alt tablo kaydıyla sonuçlanan dizideki öğenin 0 tabanlı dizinini belirten alt tablolara eklenecek sütunun adı.

  5. İ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 [totypeof(Typename)]

RowLimit basitçe:

limitRowLimit

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"
}