Jenis data dinamis
Jenis dynamic
data skalar dapat berupa salah satu nilai berikut:
- Larik dari nilai
dynamic
, memiliki nilai nol atau lebih dengan pengindeksan berbasis nol. - Tas properti yang memetakan nilai
string
yang unik ke nilaidynamic
. Tas properti memiliki nol atau beberapa pemetaan seperti itu (disebut "slot"), yang diindeks oleh nilaistring
yang unik. Slot tersebut tidak berurutan. - Nilai dari salah satu jenis data skalar primitif:
bool
,datetime
,guid
,int
,long
,real
,string
, dantimespan
. - Null. Untuk informasi selengkapnya, lihat Nilai kosong.
Catatan
- Nilai jenis
dynamic
dibatasi hingga 1MB (2^20), tidak terkompresi. Jika nilai sel dalam rekaman melebihi 1MB, nilai dihilangkan dan penyerapan berhasil. Anda dapat meningkatkanMaxValueSize
kolom dengan mengubah kebijakan pengodeannya. - Meskipun jenisnya
dynamic
tampak seperti JSON, jenis ini dapat menyimpan nilai yang tidak diwakili model JSON karena tidak ada di JSON (misalnyalong
, ,real
,datetime
,timespan
, danguid
). Oleh karena itu, dalam menserialisasi nilaidynamic
ke representasi JSON, nilai yang tidak dapat direpresentasikan JSON akan diserialisasi ke nilaistring
. Sebaliknya, Kusto akan mengurai string sebagai nilai dengan aturan terikat jika dapat diurai sedemikian rupa. Ini berlaku untukdatetime
jenis ,real
,long
, danguid
. Untuk informasi selengkapnya tentang model objek JSON, lihat json.org. - Kusto tidak berupaya mempertahankan urutan pemetaan nama-ke-nilai dalam tas properti, sehingga Anda tidak dapat mengasumsikan urutan yang akan dipertahankan. Dua tas properti dengan set pemetaan yang sama sangat mungkin menangguhkan hasil yang berbeda ketika tas properti tersebut direpresentasikan sebagai, misalnya, nilai
string
.
Literal dinamis
Untuk menentukan dynamic
harfiah, gunakan salah satu opsi sintaks berikut:
Sintaks | Deskripsi | Contoh |
---|---|---|
dynamic([ nilai [, ...]]) |
Array literal dinamis atau skalar lainnya. | dynamic([1, 2, "hello"]) |
dynamic({ Kunci= nilai [, ...]}) |
Tas properti, atau objek. Nilai untuk kunci dapat menjadi tas properti berlapis. | dynamic({"a":1, "b":{"a":2}}) |
dynamic( value) |
Nilai dinamis yang menyimpan nilai jenis data skalar dalam. | dynamic(4) |
dynamic(null) |
Mewakili nilai null. |
Pelajari selengkapnya tentang konvensi sintaksis.
Pengakses objek dinamis
Untuk memberi tanda pada kamus, gunakan notasi titik (dict.key
) atau notasi tanda kurung (dict["key"]
). Ketika subskrip adalah konstanta string, kedua opsi tersebut setara.
Catatan
Untuk menggunakan ekspresi sebagai subskrip, gunakan notasi tanda kurung. Saat menggunakan ekspresi aritmetika, ekspresi di dalam tanda kurung harus ditutup dengan tanda kurung.
Dalam contoh di bawah dict
dan arr
merupakan kolom jenis dinamis:
Ekspresi | Jenis ekspresi pengakses | Makna | Komentar |
---|---|---|---|
dict[col] | Nama entitas (kolom) | Memberi tanda pada kamus menggunakan nilai kolom col sebagai kuncinya |
Kolom harus berupa string jenis |
arr[index] | Indeks entitas (kolom) | Memberi tanda pada array menggunakan nilai kolom index sebagai indeks |
Kolom harus dari jenis bilangan bulat atau boolean |
arr[-index] | Indeks entitas (kolom) | Mengambil nilai 'indeks'-th dari akhir larik | Kolom harus dari jenis bilangan bulat atau boolean |
arr[(-1)] | Indeks entitas | Mengambil nilai terakhir dalam larik | |
arr[toint(indexAsString)] | Panggilan Fungsi | Mentransmisikan nilai kolom indexAsString ke int dan menggunakannya untuk memberi tanda pada larik |
|
dict[['where']] | Kata kunci yang digunakan sebagai nama entitas (kolom) | Memberi tanda pada kamus menggunakan nilai kolom where sebagai kuncinya |
Nama entitas yang identik dengan beberapa kata kunci bahasa kueri harus diberi tanda kutip |
dict.['where'] atau dict['where'] | Terus-menerus | Memberi tanda pada kamus menggunakan string where sebagai kuncinya |
Tip
Sebaiknya gunakan subskrip konstan jika memungkinkan.
Mengakses sub-objek dari nilai dynamic
menangguhkan nilai lain dynamic
, bahkan jika sub-objek memiliki jenis pokok yang berbeda. Gunakan fungsi gettype
untuk menemukan jenis pokok sebenarnya dari nilai, dan fungsi transmisi yang dicantumkan di bawah untuk mentransmisikan nilai ke jenis sebenarnya.
Mentransmisikan objek dinamis
Setelah memberi tanda pada objek dinamis, Anda harus mentransmisikan nilai ke jenis yang simpel.
Ekspresi | Nilai | Jenis |
---|---|---|
X | parse_json('[100,101,102]') | array |
X[0] | parse_json('100') | dynamic |
toint(X[1]) | 101 | int |
Y | parse_json('{"a1":100, "a b c":"2015-01-01"}') | dictionary |
Y.a1 | parse_json('100') | dynamic |
Y["a b c"] | parse_json("2015-01-01") | dynamic |
todate(Y["a b c"]) | datetime(2015-01-01) | datetime |
Fungsi transmisi adalah:
tolong()
todouble()
todatetime()
totimespan()
tostring()
toguid()
parse_json()
Membuat objek dinamis
Beberapa fungsi memungkinkan Anda membuat objek dynamic
baru:
- bag_pack() membuat tas properti dari pasangan nama/nilai.
- pack_array() membuat larik dari pasangan nama/nilai.
- range() membuat larik dengan deretan angka aritmetika.
- zip() memasangkan nilai "paralel" dari dua larik ke satu larik.
- repeat() membuat larik dengan nilai berulang.
Selain itu, ada beberapa fungsi agregat yang membuat larik dynamic
menyimpan nilai agregat:
- buildschema() menampilkan skema agregat dari beberapa nilai
dynamic
. - make_bag() menampilkan tas properti dari nilai dinamis dalam grup.
- make_bag_if() menampilkan tas properti dari nilai dinamis dalam grup (dengan predikat).
- make_list() menampilkan larik yang memiliki semua nilai,secara berurutan.
- make_list_if() menampilkan larik yang memiliki semua nilai, secara berurutan (dengan predikat).
- make_list_with_nulls() menampilkan larik yang memiliki semua nilai, secara berurutan, termasuk nilai null.
- make_set() menampilkan larik yang memiliki semua nilai unik.
- make_set_if() menampilkan larik yang memiliki semua nilai unik (dengan predikat).
Operator dan fungsi, bukan jenis dinamis
Untuk daftar lengkap fungsi larik/,dinamis skalar lihat fungsi dinamis/larik.
Operator atau fungsi | Penggunaan dengan jenis data dinamis |
---|---|
valuein array |
True jika ada elemen array yang == nilai where City in ('London', 'Paris', 'Rome') |
value!in array |
True jika tidak ada elemen array yang == nilai |
Array) |
Null jika bukan larik |
bag_has_key( bag, key) |
Periksa apakah kolom bag dinamis berisi kunci tertentu. |
bag_keys( bag) |
Menghitung semua kunci root dalam objek tas properti dinamis. |
bag_merge( bag1,...,bagN) |
Menggabungkan tas properti dinamis ke dalam tas properti dinamis yang memiliki semua properti digabungkan. |
bag_set_key( bag,key,value) |
Menetapkan kunci tertentu ke nilai tertentu dalam tas properti dinamis. |
extract_json (path,object), extract_json( path,object) |
Gunakan jalur untuk menavigasi ke objek. |
parse_json( source) |
Mengubah string JSON menjadi objek dinamis. |
range( from,to,step) |
Array nilai. |
mv-expand listColumn |
Mereplikasi baris untuk setiap nilai dalam daftar pada sel tertentu. |
summarize buildschema( column) |
Menyimpulkan skema jenis dari konten kolom. |
summarize make_bag( kolom) |
Menggabungkan nilai tas properti (kamus) dalam kolom menjadi satu tas properti, tanpa duplikasi kunci. |
summarize make_bag_if( column,predicate) |
Menggabungkan nilai tas properti (kamus) di kolom menjadi satu tas properti, tanpa duplikasi kunci (dengan predikat). |
summarize make_list( column) |
Menyelaraskan kumpulan baris dan menempatkan nilai kolom dalam larik. |
summarize make_list_if( column,predicate) |
Menyelaraskan kumpulan baris dan menempatkan nilai kolom dalam larik (dengan predikat). |
summarize make_list_with_nulls( column) |
Menyelaraskan kumpulan baris dan menempatkan nilai kolom dalam larik, termasuk nilai null. |
summarize make_set( column) |
Menyelaraskan kumpulan baris dan menempatkan nilai kolom dalam larik, tanpa duplikasi. |
Pengindeksan untuk data dinamis
Setiap bidang diindeks selama penyerapan data. Cakupan indeks adalah shard data tunggal.
Untuk mengindeks kolom dinamis,proses penyerapan tersebut menghitung semua elemen “kecil” dalam nilai dinamis (nama properti, nilai, elemen larik) dan meneruskannya ke pembuat indeks. Bidang dinamis memiliki indeks istilah terbalik yang sama dengan bidang string.
Contoh
Tas properti dinamis
Kueri berikut membuat tas properti dinamis.
print o=dynamic({"a":123, "b":"hello", "c":[1,2,3], "d":{}})
| extend a=o.a, b=o.b, c=o.c, d=o.d
Untuk kemudahan, literal dynamic
yang muncul dalam teks kueri itu sendiri juga dapat menyertakan literal Kusto lainnya dengan jenis: datetime
, timespan
, real
, long
, guid
, bool
, dan dynamic
.
Ekstensi melalui JSON ini tidak tersedia saat mengurai string (seperti saat menggunakan fungsi parse_json
atau saat menyerap data), tetapi memungkinkan Anda melakukan hal berikut:
print d=dynamic({"a": datetime(1970-05-11)})
Untuk mengurai nilai string
yang mengikuti aturan pengodean JSON menjadi nilai dynamic
, gunakan fungsi parse_json
. Contohnya:
parse_json('[43, 21, 65]')
- larik angkaparse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')
- kamusparse_json('21')
- satu nilai jenis dinamis yang berisi angkaparse_json('"21"')
- satu nilai jenis dinamis yang berisi stringparse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')
- memberikan nilai yang samao
dalam contoh di atas.
Catatan
Tidak seperti JavaScript, JSON memerlukan penggunaan karakter tanda kutip ganda ("
) di sekitar string dan nama properti property-bag. Oleh karena itu, umumnya lebih mudah untuk mengutip string yang dikodekan JSON secara literal dengan menggunakan karakter tanda kutip tunggal ('
).
Menyerap data ke dalam kolom dinamis
Contoh berikut menunjukkan bagaimana Anda bisa menentukan tabel yang menyimpan dynamic
kolom (serta datetime
kolom) lalu menyerap satu rekaman ke dalamnya. Ini juga menunjukkan bagaimana Anda dapat mengodekan string JSON dalam file CSV.
// dynamic is just like any other type:
.create table Logs (Timestamp:datetime, Trace:dynamic)
// Everything between the "[" and "]" is parsed as a CSV line would be:
// 1. Since the JSON string includes double-quotes and commas (two characters
// that have a special meaning in CSV), we must CSV-quote the entire second field.
// 2. CSV-quoting means adding double-quotes (") at the immediate beginning and end
// of the field (no spaces allowed before the first double-quote or after the second
// double-quote!)
// 3. CSV-quoting also means doubling-up every instance of a double-quotes within
// the contents.
.ingest inline into table Logs
[2015-01-01,"{""EventType"":""Demo"", ""EventValue"":""Double-quote love!""}"]
Output
Tanda waktu | Jejak |
---|---|
2015-01-01 00:00:00.0000000 | {"EventType":"Demo","EventValue":"Double-quote love!"} |
Konten terkait
- Untuk contoh tentang cara mengkueri menggunakan objek dinamis dan pengaktor objek, lihat Memetakan nilai dari satu set ke yang lain.
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