Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menerapkan kueri bertumpuk ke setiap catatan dan menampilkan gabungan hasil dari semua kueri bertumpuk.
Misalnya, anggaplah tabel T
memiliki kolom Metric
dari jenis dynamic
yang nilainya adalah larik dengan angka real
. Kueri berikut menemukan dua nilai terbesar di setiap Metric
nilai, dan mengembalikan rekaman yang sesuai dengan nilai-nilai ini.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
Operator mv-apply
memiliki langkah-langkah pemrosesan berikut:
- Menggunakan operator
mv-expand
untuk memperluas setiap catatan dalam input ke subtabel (urutan dipertahankan). - Menerapkan kueri bertumpuk untuk tiap-tiap subtabel.
- Menambahkan nol atau beberapa kolom ke subtabel yang dihasilkan. Kolom ini berisi nilai kolom sumber yang tidak diperluas, dan akan diulang jika diperlukan.
- Menampilkan gabungan hasil.
Operator mv-apply
menerima input berikut:
Satu atau beberapa ekspresi yang mengevaluasi ke larik dinamis yang akan diperluas. Jumlah catatan di setiap subtabel yang diperluas adalah panjang maksimum dari tiap-tiap larik dinamis tersebut. Nilai null ditambahkan ketika beberapa ekspresi ditentukan dan larik terkait memiliki panjang berbeda.
Atau, nama untuk menetapkan nilai ekspresi setelah ekspansi. Nama-nama ini menjadi nama kolom di subtabel. Jika tidak ditentukan, nama asli kolom digunakan saat ekspresi adalah referensi kolom. Sebaliknya, nama acak digunakan.
Catatan
Kami menyarankan agar Anda menggunakan nama kolom default.
Jenis data elemen dari larik dinamis tersebut, setelah ekspansi. Jenis data ini menjadi jenis kolom kolom dalam subtable. Jika tidak ditentukan,
dynamic
digunakan.Secara opsional, nama kolom yang akan ditambahkan ke subtabel yang menentukan indeks elemen berbasis 0 dalam larik yang menghasilkan catatan subtabel.
Secara opsional, jumlah maksimum elemen larik yang akan diperluas.
Operator mv-apply
dapat dianggap sebagai generalisasi operator mv-expand
(pada kenyataannya, operator terbaru dapat diimplementasikan oleh operator sebelumnya, jika kueri bertumpuk hanya mencakup proyeksi.)
Sintaks
T|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
SubQuery)
Ketika ItemIndex memiliki sintaksis:
with_itemindex
=
IndexColumnName
ColumnsToExpand adalah daftar dari satu atau beberapa elemen formulir yang dipisahkan koma:
[Nama=
] ArrayExpression [to
typeof
(
Typename])
RowLimit adalah:
limit
RowLimit
SubQuery memiliki sintaks yang sama dari pernyataan kueri apa pun.
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
ItemIndex |
string |
Menunjukkan nama kolom jenis long yang ditambahkan ke input sebagai bagian dari fase ekspansi array dan menunjukkan indeks array berbasis 0 dari nilai yang diperluas. |
|
Name |
string |
Nama untuk menetapkan nilai yang diperluas array dari setiap ekspresi yang diperluas array. Jika tidak ditentukan, nama kolom digunakan jika tersedia. Nama acak dihasilkan jika ArrayExpression bukan nama kolom sederhana. | |
ArrayExpression |
dynamic |
✔️ | Array yang nilainya diperluas array. Jika ekspresi adalah nama kolom dalam input, kolom input dihapus dari input dan kolom baru dengan nama yang sama, atau ColumnName jika ditentukan, muncul dalam output. |
Typename |
string |
Nama jenis yang diambil elemen individual array dynamic ArrayExpression . Elemen yang tidak sesuai dengan jenis ini digantikan oleh nilai null. Jika tidak ditentukan, dynamic digunakan secara default. |
|
RowLimit |
int |
Batas jumlah rekaman yang akan dihasilkan dari setiap rekaman input. Jika tidak ditentukan, 2147483647 digunakan. | |
SubQuery |
string |
Ekspresi kueri tabular dengan sumber tabular implisit yang diterapkan ke setiap subtable yang diperluas array. |
Catatan
mv-expand
Tidak seperti operator, mv-apply
operator tidak mendukung bagexpand=array
ekspansi. Jika ekspresi yang akan diperluas adalah tas properti dan bukan array, Anda dapat menggunakan operator dalam mv-expand
(lihat contoh berikut).
Contoh
Tinjau contoh dan jalankan di halaman kueri Data Explorer Anda.
Mendapatkan elemen terbesar dari larik
Kueri menghasilkan angka genap terkecil (2) dan angka ganjil terkecil (1).
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
)
Hasil
xMod2 |
l | elemen |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Menghitung jumlah dua elemen terbesar dalam larik
Kueri menghasilkan jumlah dua angka genap teratas (6 + 8 = 14) dan jumlah dua angka ganjil teratas (5 + 7 = 12).
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)
)
Hasil
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Pilih elemen dalam array
Kueri mengidentifikasi dua elemen teratas dari setiap array dinamis berdasarkan nilai Arr2 dan meringkasnya ke dalam daftar baru.
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)
)
Hasil
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] |
Menggunakan with_itemindex
agar dapat berfungsi dengan sebagian larik
Kueri menghasilkan tabel dengan baris di mana indeks adalah 3 atau lebih besar, termasuk nilai indeks dan elemen dari daftar asli angka genap dan ganjil.
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
Hasil
indeks | elemen |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Menggunakan beberapa kolom untuk menggabungkan elemen dari dua array
Kueri menggabungkan elemen dari dua array dinamis ke dalam format yang digabungkan baru lalu meringkasnya ke dalam daftar.
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)
)
Hasil
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"] |
Menerapkan mv-apply ke tas properti
Kueri ini secara dinamis menghapus properti dari objek nilai yang dikemas berdasarkan kriteria bahwa nilainya tidak dimulai dengan 555. Hasil akhir berisi kolom asli dengan properti yang tidak diinginkan dihapus.
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
Hasil
SourceNumber | TargetNumber | CharsCount | nilai |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |