Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Beralih layanan menggunakan menu tarik-turun Versi. Pelajari selengkapnya tentang navigasi.
Berlaku untuk: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Jenis dynamic data skalar bisa menjadi salah satu nilai berikut:
- Larik dari nilai
dynamic, memiliki nilai nol atau lebih dengan pengindeksan berbasis nol. - Tas properti yang memetakan nilai
stringyang unik ke nilaidynamic. Tas properti memiliki nol atau beberapa pemetaan seperti itu (disebut "slot"), yang diindeks oleh nilaistringyang 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 null.
Catatan
- Meskipun jenisnya
dynamictampak seperti JSON, jenis tersebut dapat menyimpan nilai yang tidak diwakili model JSON karena tidak ada di JSON (misalnyalong, ,real,datetime,timespandanguid). Oleh karena itu, dalam menserialisasi nilaidynamicke 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 untukdatetimejenis ,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. - Saat menyerap data, nilai jenis
dynamicdata dibatasi secara default hingga 1 MiB (2^20), tidak dikompresi. Anda dapat meningkatkanMaxValueSizekolom dengan mengubah kebijakan pengodeannya untuk memungkinkan nilai hingga 32 MiB.
Literal dinamis
Untuk menentukan dynamic literal, gunakan salah satu opsi sintaks berikut:
| Sintaks | Deskripsi | Contoh |
|---|---|---|
dynamic([
nilai [, ...]]) |
Array literal dinamis atau skalar lainnya. | dynamic([1, 2, "hello"]) |
dynamic({
= [ ...], |
Tas properti, atau objek. Nilai untuk kunci dapat menjadi tas properti berlapis. | dynamic({"a":1, "b":{"a":2}}) |
dynamic(
nilai) |
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 gettypeuntuk 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 array dari daftar nilai (bisa berupa daftar kolom, untuk setiap baris, ia akan membuat array dari kolom yang ditentukan).
- 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 |
|---|---|
array nilaiin |
True jika ada elemen array yang == nilai where City in ('London', 'Paris', 'Rome') |
array nilai!in |
True jika tidak ada elemen array yang == nilai |
array_length(Array) |
Null jika bukan larik |
bag_has_key(kunci tas,) |
Periksa apakah kolom bag dinamis berisi kunci tertentu. |
bag_keys(Tas) |
Menghitung semua kunci akar dalam objek tas properti dinamis. |
bag_merge(bag1,...,bagN) |
Menggabungkan beberapa tas properti dinamis ke dalam satu tas properti dinamis dengan 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(sumber) |
Mengubah string JSON menjadi objek dinamis. |
range(dari,ke,langkah) |
Array nilai. |
mv-expand listColumn |
Mereplikasi baris untuk setiap nilai dalam daftar pada sel tertentu. |
summarize buildschema(Kolom) |
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(kolom, predikat) |
Menggabungkan nilai tas properti (kamus) di kolom menjadi satu tas properti, tanpa duplikasi kunci (dengan predikat). |
summarize make_list(Kolom) |
Menyelaraskan kumpulan baris dan menempatkan nilai kolom dalam larik. |
summarize make_list_if(kolom, predikat) |
Menyelaraskan kumpulan baris dan menempatkan nilai kolom dalam larik (dengan predikat). |
summarize make_list_with_nulls(Kolom) |
Menyelaraskan kumpulan baris dan menempatkan nilai kolom dalam larik, termasuk nilai null. |
summarize make_set(Kolom) |
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 menghitung semua elemen "atom" dalam nilai dinamis (nama properti, nilai, elemen array) dan meneruskannya ke penyusun 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 angka -
parse_json('{"name":"Alan", "age":21, "address":{"street":432,"postcode":"JLK32P"}}')- kamus -
parse_json('21')- satu nilai jenis dinamis yang berisi angka -
parse_json('"21"')- satu nilai jenis dinamis yang berisi string -
parse_json('{"a":123, "b":"hello", "c":[1,2,3], "d":{}}')- memberikan nilai yang samaodalam contoh di atas.
Catatan
Tidak seperti JavaScript, JSON memerlukan penggunaan karakter tanda kutip ganda (") di sekitar string dan nama properti tas properti. 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!""}"]
Hasil
| Tanda Waktu | Trace |
|---|---|
| 2015-01-01 00:00:00.0000000 | {"EventType":"Demo","EventValue":"Cinta kutipan ganda!"} |
Konten terkait
- Untuk contoh tentang cara mengkueri menggunakan objek dinamis dan aksesor objek, lihat Memetakan nilai dari satu set ke yang lain.