Bagikan melalui


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 ...] [limitRowlimit]

T|mv-expand [kind=(bag | array)] [Name=] ArrayExpression [to typeof(Typename)] [, [Name=] ArrayExpression [to typeof(Typename)] ...] [limitRowlimit]

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:

  1. 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.

  2. 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.

  3. 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 atau bagexpansion=bag: diperluas menjadi tas properti entri tunggal. Mode ini adalah mode default.
  • kind=array atau bagexpansion=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