operator mv-expand
Memperluas array dinamis multi-nilai atau tas properti menjadi beberapa baris.
mv-expand dapat digambarkan sebagai kebalikan dari operator agregasi yang mengemas beberapa nilai ke dalam jenis array dinamistunggal atau tas properti, seperti summarize ... make-list() dan make-series.
Setiap elemen dalam array (skalar) atau tas properti menghasilkan baris baru dalam output operator. Semua kolom input yang tidak diperluas diduplikasi ke semua baris dalam output.
Sintaks
T| mv-expand [bagexpansion=(bag | array)] [with_itemindex=IndexColumnName] ColumnName [to typeof(Typename)] [,ColumnName ...] [limitRowlimit]
T| mv-expand [bagexpansion=(bag | array)] Nama=ArrayExpression [to typeof(Typename)] [, [Nama=] ArrayExpression [to typeof(Typename)] ...] [limitRowlimit]
Argumen
ColumnName, ArrayExpression: Referensi kolom, atau ekspresi skalar, dengan nilai jenis
dynamic, yang memegang array atau tas properti. Elemen tingkat atas individu dari array atau tas properti diperluas menjadi beberapa baris.
Ketika ArrayExpression digunakan dan Nama tidak sama dengan nama kolom input, nilai yang diperluas diperlebar ke kolom baru dalam output. Jika tidak, ColumnName yang ada diganti.Nama: Nama untuk kolom baru.
Typename: Menunjukkan jenis elemen array yang mendasarinya, yang menjadi jenis kolom yang dihasilkan oleh operator
mv-expand. Pengoperasian jenis penerapan hanya bersifat transmisikan dan tidak termasuk penguraian atau konversi jenis. Elemen array yang tidak sesuai dengan jenis yang dideklarasikan akan menjadi nilainull.RowLimit: Jumlah maksimum baris yang dihasilkan dari setiap baris asli. Secara default adalah 2147483647.
Catatan
mvexpandadalah bentuk lama dan usang darimv-expandoperator. Versi lama memiliki batas baris default 128.IndexColumnName: Jika
with_itemindexditentukan, output akan menyertakan kolom lain (bernama IndexColumnName), yang berisi indeks (mulai dari 0) item dalam kumpulan asli yang diperluas.
Mengembalikan
Untuk setiap baris dalam input, operator mengembalikan nol, satu, atau banyak baris dalam output, sebagaimana ditentukan dengan cara berikut:
Kolom input yang tidak diperluas muncul dalam output dengan nilai aslinya. Jika satu baris input diperluas menjadi beberapa baris output, nilainya diduplikasi ke semua baris.
Untuk setiap ColumnName atau ArrayExpression yang diperluas, jumlah baris output ditentukan untuk setiap nilai seperti yang dijelaskan di bawah ini. Untuk setiap baris input, jumlah maksimum baris output dihitung. Semua array atau tas properti diperluas "secara paralel" sehingga nilai yang hilang (jika ada) digantikan oleh nilai null. Elemen diperluas menjadi baris dalam urutan yang muncul di array/tas asli.
Jika nilai dinamis adalah null, maka satu baris dihasilkan untuk nilai tersebut (null). Jika nilai dinamis adalah array kosong atau tas properti, tidak ada baris yang dihasilkan untuk nilai itu. Jika tidak, sebanyak mungkin baris dihasilkan karena ada elemen dalam nilai dinamis.
Kolom yang diperluas adalah jenis dynamic, kecuali jika diketik secara eksplisit dengan menggunakan klausa to typeof().
Mode ekspansi
Dua mode ekspansi tas properti didukung:
- Tas properti
bagexpansion=bagataukind=bag: diperluas menjadi tas properti entri tunggal. Mode ini adalah mode default. bagexpansion=arrayataukind=array: Properti tas diperluas menjadi dua elemen array struktur[kunci,nilai], memungkinkan akses seragam ke kunci dan nilai. Mode ini juga memungkinkan, misalnya, menjalankan agregasi hitungan yang berbeda atas nama properti.
Contoh
Kolom Tunggal
Perluasan sederhana dari satu kolom:
datatable (a:int, b:dynamic)[1,dynamic({"prop1":"a", "prop2":"b"})]
| mv-expand b
| a | b |
|---|---|
| 1 | {"prop1":"a"} |
| 1 | {"prop2":"b"} |
Zip dua kolom
Memperluas dua kolom pertama-tama akan 'zip' kolom yang berlaku dan kemudian memperluasnya:
datatable (a:int, b:dynamic, c:dynamic)[1,dynamic({"prop1":"a", "prop2":"b"}), dynamic([5, 4, 3])]
| mv-expand b, c
| a | b | c |
|---|---|---|
| 1 | {"prop1":"a"} | 5 |
| 1 | {"prop2":"b"} | 4 |
| 1 | 3 |
Produk Kartesius dari dua kolom
Jika Anda ingin mendapatkan produk Kartesius untuk memperluas dua kolom, perluas satu demi satu:
datatable (a:int, b:dynamic, c:dynamic)
[
1,
dynamic({"prop1":"a", "prop2":"b"}),
dynamic([5, 6])
]
| mv-expand b
| mv-expand c
| a | b | c |
|---|---|---|
| 1 | { "prop1": "a"} | 5 |
| 1 | { "prop1": "a"} | 6 |
| 1 | { "prop2": "b"} | 5 |
| 1 | { "prop2": "b"} | 6 |
Konversi output
Untuk memaksa output mv-expand ke jenis tertentu (default bersifat dinamis), gunakan to typeof:
datatable (a:string, b:dynamic, c:dynamic)["Constant", dynamic([1,2,3,4]), dynamic([6,7,8,9])]
| mv-expand b, c to typeof(int)
| getschema
| ColumnName | ColumnOrdinal | DateType | ColumnType |
|---|---|---|---|
| a | 0 | System.String | string |
| b | 1 | System.Object | dinamis |
| c | 2 | System.Int32 | int |
Kolom pemberitahuan b dikembalikan sebagai dynamic saat c dikembalikan sebagai int.
Menggunakan with_itemindex
Perluasan array dengan with_itemindex:
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
| x | Indeks |
|---|---|
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
Lihat juga
- Lihat Bagan jumlahaktivitas langsung dari waktu ke waktu untuk contoh selengkapnya.
- operator mv-apply.
- meringkas make_list(), yang merupakan fungsi berlawanan dari mv-expand.
- bag_unpack() untuk memperluas objek JSON dinamis ke dalam kolom menggunakan kunci tas properti.