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 nilai null.

  • RowLimit: Jumlah maksimum baris yang dihasilkan dari setiap baris asli. Secara default adalah 2147483647.

    Catatan

    mvexpand adalah bentuk lama dan usang dari mv-expand operator. Versi lama memiliki batas baris default 128.

  • IndexColumnName: Jika with_itemindex ditentukan, 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:

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

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