mv-apply işleci

Sürüm açılan listesini kullanarak hizmetler arasında geçiş yapın. Gezinti hakkında daha fazla bilgi edinin.
Şunlar için geçerlidir: ✅ Microsoft Fabric ✅ Azure Veri Gezgini ✅ Azure İzleyici ✅ Microsoft Sentinel

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 Metric sütunu dynamic 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
)

işleci mv-apply 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. Her alt tablo için alt sorgu 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 atanacak 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ı kullanmanızı öneririz.

  3. Genişletmeden sonra bu dinamik dizilerin öğelerinin veri türleri. Bu veri türleri, alt tablolardaki sütunların sütun türleri haline gelir. Belirtilmezse kullanılır dynamic .

  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 öğesi sayısı üst sınırıdır.

İşleç mv-apply , işlecin genelleştirmesi mv-expand olarak düşünülebilir (aslında, alt sorgu yalnızca projeksiyonlar içeriyorsa, ikincisi önceki tarafından uygulanabilir.)

Sözdizimi

T|mv-apply [ItemIndex] ColumnsToExpand [RowLimit] on(SubQuery)

Burada ItemIndex söz dizimine sahiptir:

with_itemindex = IndexColumnName

ColumnsToExpand , formun bir veya daha fazla öğesinin virgülle ayrılmış listesidir:

[Ad=] ArrayExpression [totypeof(Typename])

RowLimit basitçe:

limit RowLimit

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 Zorunlu Açıklama
ItemIndex string Dizi genişletme aşamasının 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.
Name string Dizi genişletilmiş her ifadenin dizi genişletilmiş değerlerini atanacak 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 ArrayExpressiondynamictek tek öğelerinin yaptığı türün adı. Bu türe uymayan öğeler null değerle değiştirilir. Belirtilmezse, dynamic varsayılan olarak kullanılır.
RowLimit int Girişin her kaydından oluşturulacak kayıt sayısı sınırı. Belirtilmezse, 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 özellik paketiyse, bir iç mv-expand işleç kullanabilirsiniz (aşağıdaki örne bakın).

Örnekler

Örnekleri gözden geçirin ve Veri Gezgini sorgu sayfanızda çalıştırın.

mv-apply tarafından yapılan iç mv-expand

Sorgu, mv-apply tarafından dahili olarak yapılan mv-expand işleminin anlaşılmasına yardımcı olur

let data = datatable (index: int, Arr: dynamic)
[
    0, dynamic([7]),
    1, dynamic([6, 11, 7])
];
data
| mv-apply Arr2=Arr to typeof(long) on 
    (
       take 100
    )

Çıktı

dizin Arr Arr2
0 [7] 7
1 [6, 11, 7] 6
1 [6, 11, 7] 11
1 [6, 11, 7] 7

Diziden en büyük öğeyi alma

Sorgu, bir dizinin en büyük öğesine sahip yeni bir sütun oluşturur.

let data = datatable (index: int, Arr: dynamic)
[
    0, dynamic([1, 5, 3]),
    1, dynamic([10, 2, 5, 7])
];
data
| mv-apply topElem=Arr to typeof(long) on 
    (
    top 1 by topElem
    )

Çıktı

dizin Arr topElem
0 [1, 5, 3] 5
1 [10, 2, 5, 7] 10

Dizideki ilk iki öğeyi bulma

Sorgu, bir dizinin ilk iki öğesini yeni bir dizi sütunu olan Top2'ye kaydeder.

let data = datatable (index: int, Arr: dynamic)
[
    0, dynamic([5, 1, 3]),
    1, dynamic([4, 10, 8, 7])
];
data
| mv-apply Arr2=Arr to typeof(long) on 
    (
    top 2 by Arr2
    | summarize Top2=make_list(Arr2)
    )

Çıktı

dizin Arr Top2
0 [5, 1, 3] [5, 3]
1 [4, 10, 8, 7] [10, 8]

Dizilerdeki öğeleri seçme

Sorgu, Arr2 değerlerini temel alarak her dinamik diziden en iyi iki öğeyi tanımlar ve bunları yeni listelerde özetler.

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)
)

Çıktı

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

Sorgu, özgün listelerdeki dizin ve öğe değerleri de dahil olmak üzere dizinin 2 veya daha büyük olduğu satırları içeren bir tabloyla sonuçlanır.

let data = datatable (row: int, Arr: dynamic)
[
    0, dynamic([5, 1, 3]),
    1, dynamic([4, 10, 8, 7])
];
data
| mv-apply with_itemindex=index value=Arr to typeof(long) on 
  (
    // here you have 'index' column
    where index >= 2
  )

Çıktı

sıra Arr value index
0 [5, 1, 3] 3 2
1 [4, 10, 8, 7] 8 2
1 [4, 10, 8, 7] 7 3

İki dizinin öğesini birleştirmek için birden çok sütun kullanma

Sorgu, iki dinamik dizideki öğeleri yeni birleştirilmiş biçimde birleştirir ve sonra bunları listeler halinde özetler.

datatable (Val: int, Arr1: dynamic, Arr2: dynamic)
[
    1, dynamic(['A1', 'A2']), dynamic(['B1', 'B2', 'B3']), 
    5, dynamic(['C1', 'C2']), dynamic(['D1'])
] 
| mv-apply T1=Arr1, T2=Arr2 on (
    extend Out = strcat(T1, "_", T2)
    | summarize Out= make_list(Out)
  )

Çıktı

Val Arr1 Arr2 Out
1 ["A1","A2"] ["B1","B2","B3"] ["A1_B1","A2_B2","_B3"]
5 ["C1","C2"] ["D1"] ["C1_D1","C2_"]

Bir özellik paketine mv-apply uygulama

Bu sorgu, değerlerinin 555 ile başlamadığı ölçütlere göre paketlenmiş değerler nesnesinden özellikleri dinamik olarak kaldırır. Sonuç, istenmeyen özelliklerin kaldırıldığı özgün sütunları içerir.

datatable(Source: string, Target: string, Count: long)
[
    '555-1234', '555-1212', 46,
    '555-2424', '', int(null)
]
| extend Pack = pack_all()
| mv-apply removeProperties = Pack on 
    (
    mv-expand kind = array Pack
    | where Pack[1] !startswith "555"
    | summarize propsToRemove = make_set(Pack[0])
    )
| extend values = bag_remove_keys(Pack, propsToRemove)
| project-away propsToRemove

Çıktı

Kaynak Target Sayı Paketlemek values
555-1234 555-1212 46 {
"Kaynak": "555-1234",
"Hedef": "555-1212",
"Sayı": 46
}
{
"Kaynak": "555-1234",
"Hedef": "555-1212"
}
555-2424     {
"Kaynak": "555-2424",
"Hedef": "",
"Count": null
}
{
"Kaynak": "555-2424"
}