operator mv-apply
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
Sebaiknya gunakan nama kolom default.
Jenis data elemen dari larik dinamis tersebut, setelah ekspansi. Jenis data ini menjadi jenis kolom dari kolom di subtabel. 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:
[Name=
] ArrayExpression [to
typeof
(
Typename)
]
RowLimit adalah:
limit
RowLimit
dan SubQuery memiliki sintaksis dari setiap pernyataan kueri.
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Jenis | Diperlukan | 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. |
|
Nama | string |
Nama untuk menetapkan nilai yang diperluas array dari setiap ekspresi yang diperluas array. Jika tidak ditentukan, nama kolom akan 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. |
Nama jenis | 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. | |
SubKueri | string |
Ekspresi kueri tabular dengan sumber tabular implisit yang diterapkan ke setiap subtabel 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 (lihat contoh di mv-expand
bawah).
Contoh
Mendapatkan elemen terbesar dari larik
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
)
Output
xMod2 |
l | elemen |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Menghitung jumlah dua elemen terbesar dalam larik
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)
)
Output
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Memilih elemen dalam array
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)
)
Output
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
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
Output
indeks | elemen |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Menggunakan kolom mutiple untuk menggabungkan elemen 2 array
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)
)
Output
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
Dalam contoh berikut, mv-apply
digunakan dalam kombinasi dengan mv-expand
dalam untuk menghapus nilai yang tidak dimulai dengan "555" dari tas properti:
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
Output
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" } |
Konten terkait
- operator mv-expand
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk