operator mv-expand
Berlaku untuk: ✅Microsoft Fabric✅
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
[kind=
(bag
| array
)] [with_itemindex=
IndexColumnName] ColumnName [to typeof(
Typename)
] [,
ColumnName ...] [limit
Rowlimit]
T|mv-expand
[kind=
(bag
| array
)] [Name=
] ArrayExpression [to typeof(
Typename)
] [,
[Name=
] ArrayExpression [to typeof(
Typename)
] ...] [limit
Rowlimit]
Pelajari selengkapnya tentang konvensi sintaksis.
Parameter
Nama | Tipe | Wajib | Deskripsi |
---|---|---|---|
ColumnName, ArrayExpression | string |
✔️ | Referensi kolom, atau ekspresi skalar dengan nilai jenis dynamic yang menyimpan 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 | string |
Nama untuk kolom baru. | |
Nama jenis | string |
✔️ | Menunjukkan jenis elemen array yang mendasar, yang menjadi jenis kolom yang dihasilkan oleh mv-expand operator. Pengoperasian jenis penerapan hanya bersifat transmisikan dan tidak termasuk penguraian atau konversi jenis. Elemen array yang tidak sesuai dengan jenis yang dideklarasikan menjadi null nilai. |
RowLimit | int |
Jumlah maksimum baris yang dihasilkan dari setiap baris asli. Secara default adalah 2147483647.
mvexpand adalah bentuk lama dan usang dari mv-expand operator. Versi lama memiliki batas baris default 128. |
|
IndexColumnName | string |
Jika with_itemindex ditentukan, output menyertakan kolom lain bernama IndexColumnName yang berisi indeks mulai dari 0 item dalam koleksi 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 rekaman output ditentukan untuk setiap nilai seperti yang dijelaskan dalam mode ekspansi. 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
kind=bag
ataubagexpansion=bag
: diperluas menjadi tas properti entri tunggal. Mode ini adalah mode default. -
kind=array
ataubagexpansion=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
Contoh dalam artikel ini menggunakan tabel yang tersedia untuk umum di membantu kluster, seperti tabel
StormEvents
di database Sampel.
Contoh dalam artikel ini menggunakan tabel yang tersedia untuk umum, seperti tabel
StormEvents
di analitik Cuaca data sampel.
Contoh di bagian ini memperlihatkan cara menggunakan sintaks untuk membantu Anda memulai.
Kolom tunggal - ekspansi array
datatable (a: int, b: dynamic)
[
1, dynamic([10, 20]),
2, dynamic(['a', 'b'])
]
| mv-expand b
Hasil
a | b |
---|---|
1 | 10 |
1 | 20 |
2 | a |
2 | b |
Kolom tunggal - perluasan tas
Perluasan sederhana dari satu kolom:
datatable (a: int, b: dynamic)
[
1, dynamic({"prop1": "a1", "prop2": "b1"}),
2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b
Hasil
a | b |
---|---|
1 | {"prop1": "a1"} |
1 | {"prop2": "b1"} |
2 | {"prop1": "a2"} |
2 | {"prop2": "b2"} |
Kolom tunggal - perluasan tas ke pasangan kunci-nilai
Perluasan tas sederhana untuk pasangan kunci-nilai:
datatable (a: int, b: dynamic)
[
1, dynamic({"prop1": "a1", "prop2": "b1"}),
2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand kind=array b
| extend key = b[0], val=b[1]
Hasil
a | b | kunci | val |
---|---|---|---|
1 | ["prop1","a1"] | prop1 | a1 |
1 | ["prop2","b1"] | prop2 | b1 |
2 | ["prop1","a2"] | prop1 | a2 |
2 | ["prop2","b2"] | prop2 | b2 |
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
Hasil
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
Hasil
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
Hasil
ColumnName | ColumnOrdinal | DateType | ColumnType |
---|---|---|---|
a | 0 | System.String | string |
b | 1 | System.Object | dynamic |
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
Hasil
x | Indeks |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Konten terkait
- operator mv-apply.
- Untuk kebalikan dari operator mv-expand, lihat meringkas make_list().
- Untuk memperluas objek JSON dinamis ke dalam kolom menggunakan kunci tas properti, lihat plugin bag_unpack().
- fungsi parse_json