Pernyataan deklarasi parameter kueri

Kueri yang dikirim ke Kusto mungkin menyertakan satu set pasangan nama atau nilai. Pasangan tersebut disebut parameter kueri, bersama dengan teks kueri itu sendiri. Kueri dapat mereferensikan satu atau beberapa nilai, dengan menentukan nama dan jenis, dalam pernyataan deklarasi parameter kueri.

Parameter kueri memiliki dua kegunaan utama:

  • Sebagai mekanisme perlindungan terhadap serangan injeksi.
  • Sebagai sarana untuk membuat parameter kueri.

Secara khusus, aplikasi klien yang menggabungkan input yang disediakan pengguna dalam kueri yang kemudian mereka kirimkan ke Kusto harus menggunakan mekanisme untuk melindungi terhadap Kusto yang setara dengan serangan injeksi SQL.

Mendeklarasikan parameter kueri

Untuk mereferensikan parameter kueri, teks kueri, atau fungsi yang digunakannya, harus terlebih dahulu mendeklarasikan parameter kueri mana yang digunakannya. Untuk setiap parameter, deklarasi tersebut mencantumkan nama dan jenis skalar. Secara opsional, parameter juga dapat memiliki nilai default. Nilai default digunakan jika permintaan tidak memberikan nilai konkret untuk parameter. Lalu, Kusto mengurai nilai parameter kueri, sesuai dengan aturan penguraian normal untuk jenis tersebut.

Sintaks

declarequery_parameters(Name1:Type1 [=DefaultValue1] [,...] );

  • Name1: Nama parameter kueri yang digunakan dalam kueri.
  • Type1: Jenis terkait, seperti string atau datetime. Nilai yang disediakan oleh pengguna dienkode sebagai string, ke Kusto yang akan menerapkan metode penguraian yang sesuai ke parameter kueri untuk mendapatkan nilai dengan aturan pengetikan ketat.
  • DefaultValue1: Nilai default opsional untuk parameter. Nilai ini harus merupakan literal dari jenis skalar yang sesuai.

Catatan

  • Seperti fungsi yang ditentukan pengguna, parameter kueri mengenai jenis dynamic tidak dapat memiliki nilai default.
  • Pernyataan tabular, pernyataan set, dan pernyataan let dirangkai/dipisahkan oleh titik koma, jika tidak, mereka tidak akan dianggap sebagai bagian dari kueri yang sama.

Contoh

declare query_parameters(UserName:string, Password:string);
print n=UserName, p=hash(Password)
declare query_parameters(percentage:long = 90);
T | where Likelihood > percentage

Menentukan parameter kueri dalam aplikasi klien

Nama dan nilai parameter kueri diberikan sebagai nilai string oleh aplikasi yang membuat kueri. Tidak ada nama yang bisa diulang.

Interpretasi nilai dilakukan sesuai dengan pernyataan deklarasi parameter kueri. Setiap nilai diurai seolah-olah nilai itu adalah literal dalam isi kueri. Penguraian dilakukan sesuai dengan jenis yang ditentukan oleh pernyataan deklarasi parameter kueri.

REST API

Parameter kueri diberikan oleh aplikasi klien melalui properties slot objek JSON isi permintaan, dalam tas properti bertumpuk yang disebut Parameters. Misalnya, berikut adalah isi panggilan REST API ke Kusto yang menghitung usia beberapa pengguna, kemungkinan dengan meminta aplikasi menanyakan ulang tahun pengguna.

{
    "ns": null,
    "db": "myDB",
    "csl": "declare query_parameters(birthday:datetime); print strcat(\"Your age is: \", tostring(now() - birthday))",
    "properties": "{\"Options\":{},\"Parameters\":{\"birthday\":\"datetime(1970-05-11)\",\"courses\":\"dynamic(['Java', 'C++'])\"}}"
}

Kusto .NET SDK

Untuk mencantumkan nama dan nilai parameter kueri saat menggunakan pustaka klien Kusto .NET, seseorang membuat instans baru objek ClientRequestProperties lalu menggunakan metode HasParameter, SetParameter, dan ClearParameter untuk memanipulasi parameter kueri. Kelas ini menyediakan sejumlah kelebihan beban dengan aturan pengetikan ketat untuk SetParameter; secara internal, kelas kelebihan beban tersebut menghasilkan literal yang sesuai dari bahasa kueri dan mengirimkannya sebagai melalui REST API, seperti yang string dijelaskan di atas. Teks kueri itu sendiri harus tetap mendeklarasikan parameter kueri.

Kusto.Explorer

Untuk mengatur parameter kueri yang dikirim saat mengajukan permintaan ke layanan, gunakan ikon "kunci pas" (ALT + P) Parameter kueri.

Kemampuan ini tidak didukung di Azure Monitor