Pernyataan pola
Berlaku untuk: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Pola adalah konstruksi yang memetakan tuple string ke ekspresi tabular.
Setiap pola harus menyatakan nama pola dan secara opsional menentukan pemetaan pola. Pola yang menentukan pemetaan mengembalikan ekspresi tabular saat dipanggil. Pisahkan dua pernyataan dengan titik koma.
Pola kosong adalah pola yang dideklarasikan tetapi tidak menentukan pemetaan. Saat dipanggil, mereka mengembalikan kesalahan SEM0036 bersama dengan detail definisi pola yang hilang di header HTTP.
Aplikasi tingkat menengah yang memberikan pengalaman Kusto Query Language (KQL) dapat menggunakan detail yang dikembalikan sebagai bagian dari prosesnya untuk memperkaya hasil kueri KQL. Untuk informasi selengkapnya, lihat Bekerja dengan aplikasi tingkat menengah.
Sintaksis
Deklarasikan pola kosong:
declare
pattern
;
PatternNameDeklarasikan dan tentukan pola:
declare
pattern
PatternName =(
ArgName:
ArgType [,
... ])
[[
PathName:
PathArgType]
]{
(
ArgValue1_1 [,
ArgValue2_1,
... ])
[.[
PathValue_1]
]=
{
ekspresi1}
;
[
(
ArgValue1_2 [,
ArgValue2_2,
... ])
[.[
PathValue_2]
]=
{
ekspresi2}
;
... ]}
;
Panggil pola:
-
PatternName
(
ArgValue1 [,
ArgValue2 ...]).
PathValue -
PatternName
(
ArgValue1 [,
ArgValue2 ...]).["
PathValue"]
-
PatternName
Pelajari selengkapnya tentang konvensi sintaks .
Parameter
Nama | Jenis | Diperlukan | Deskripsi |
---|---|---|---|
|
string |
✔️ | Nama pola. |
|
string |
✔️ | Nama argumen. Pola dapat memiliki satu atau beberapa argumen. |
ArgType |
string |
✔️ | Jenis data skalar dari argumen ArgName. Nilai yang mungkin: string |
|
string |
Nama argumen jalur. Pola tidak dapat memiliki jalur atau satu jalur. | |
|
string |
Jenis argumen string |
|
ArgValue |
string |
✔️ | |
PathValue | string |
Nilai yang akan dipetakan untuk PathName. | |
ekspresi |
string |
✔️ | Ekspresi tabular atau lambda yang mereferensikan fungsi yang mengembalikan data tabular. Misalnya: Logs | where Timestamp > ago(1h) |
Contoh
Contoh di bagian ini memperlihatkan cara menggunakan sintaks untuk membantu Anda memulai.
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.
Tentukan pola sederhana
Contoh ini mendefinisikan pola yang memetakan status ke ekspresi yang mengembalikan ibu kota/kota utamanya.
Menjalankan kueri
declare pattern country = (name:string)[state:string]
{
("USA").["New York"] = { print Capital = "Albany" };
("USA").["Washington"] = { print Capital = "Olympia" };
("Canada").["Alberta"] = { print Capital = "Edmonton" };
};
country("Canada").Alberta
Output
Modal |
---|
Edmonton |
Menentukan pola terlingkup
Contoh ini mendefinisikan pola untuk mencakup data dan metrik data aplikasi. Pola dipanggil untuk mengembalikan gabungan data.
Menjalankan kueri
declare pattern App = (applicationId:string)[scope:string]
{
('a1').['Data'] = { range x from 1 to 5 step 1 | project App = "App #1", Data = x };
('a1').['Metrics'] = { range x from 1 to 5 step 1 | project App = "App #1", Metrics = rand() };
('a2').['Data'] = { range x from 1 to 5 step 1 | project App = "App #2", Data = 10 - x };
('a3').['Metrics'] = { range x from 1 to 5 step 1 | project App = "App #3", Metrics = rand() };
};
union App('a2').Data, App('a1').Metrics
Output
App | Data | Metrik |
---|---|---|
Aplikasi #2 | 9 | |
Aplikasi #2 | 8 | |
Aplikasi #2 | 7 | |
Aplikasi #2 | 6 | |
Aplikasi #2 | 5 | |
Aplikasi #1 | 0.53674122855537532 | |
Aplikasi #1 | 0.78304713305654439 | |
Aplikasi #1 | 0.20168860732346555 | |
Aplikasi #1 | 0.13249123867679469 | |
Aplikasi #1 | 0.19388305330563443 |
Normalisasi
Ada variasi sintaks untuk memanggil pola. Misalnya, serikat berikut mengembalikan ekspresi pola tunggal karena semua pemanggilan memiliki pola yang sama.
declare pattern app = (applicationId:string)[eventType:string]
{
("ApplicationX").["StopEvents"] = { database("AppX").Events | where EventType == "StopEvent" };
("ApplicationX").["StartEvents"] = { database("AppX").Events | where EventType == "StartEvent" };
};
union
app("ApplicationX").StartEvents,
app('ApplicationX').StartEvents,
app("ApplicationX").['StartEvents'],
app("ApplicationX").["StartEvents"]
Tidak ada kartubebas
Tidak ada perlakuan khusus yang diberikan pada kartubebas dalam pola. Misalnya, kueri berikut mengembalikan satu pemanggilan pola yang hilang.
declare pattern app = (applicationId:string)[eventType:string]
{
("ApplicationX").["StopEvents"] = { database("AppX").Events | where EventType == "StopEvent" };
("ApplicationX").["StartEvents"] = { database("AppX").Events | where EventType == "StartEvent" };
};
union app("ApplicationX").["*"]
| count
kesalahan semantik Output
Satu atau beberapa referensi pola tidak dideklarasikan. Referensi pola yang terdeteksi: ["app('ApplicationX').[' *']"]
Bekerja dengan aplikasi tingkat menengah
Aplikasi tingkat menengah memberi penggunanya kemampuan untuk menggunakan KQL dan ingin meningkatkan pengalaman dengan memperkaya hasil kueri dengan data tambahan dari layanan internalnya.
Untuk tujuan ini, aplikasi memberi pengguna pernyataan pola yang mengembalikan data tabular yang dapat digunakan pengguna mereka dalam kueri mereka. Argumen pola adalah kunci yang akan digunakan aplikasi untuk mengambil data pengayaan.
Saat pengguna menjalankan kueri, aplikasi tidak mengurai kueri itu sendiri tetapi sebaliknya menggunakan kesalahan yang dikembalikan oleh pola kosong untuk mengambil kunci yang diperlukan. Jadi kueri sebelumnya dengan deklarasi pola kosong, mengirimkannya ke kluster untuk diproses, lalu mengurai header HTTP yang dikembalikan untuk mengambil nilai argumen pola yang hilang. Aplikasi ini menggunakan nilai-nilai ini untuk mencari data pengayaan dan membangun deklarasi baru yang menentukan pemetaan data pengayaan yang sesuai.
Akhirnya, aplikasi menambahkan definisi baru ke kueri, mengirimnya kembali untuk diproses, dan mengembalikan hasil yang diterimanya kepada pengguna.
Contoh
Dalam contoh, pola dideklarasikan, ditentukan, lalu dipanggil.
Mendeklarasikan pola kosong
Dalam contoh ini, aplikasi tingkat menengah memperkaya kueri dengan lokasi bujur/lintang. Aplikasi ini menggunakan layanan internal untuk memetakan alamat IP ke lokasi bujur/lintang, dan menyediakan pola yang disebut map_ip_to_longlat
. Saat kueri dijalankan, kueri mengembalikan kesalahan dengan definisi pola yang hilang:
map_ip_to_longlat("10.10.10.10")
Mendeklarasikan dan mendefinisikan pola
Aplikasi tidak mengurai kueri ini dan karenanya tidak tahu alamat IP mana (10.10.10.10) diteruskan ke pola. Sehingga menambahkan kueri pengguna dengan deklarasi pola map_ip_to_longlat
kosong dan mengirimkannya untuk diproses:
declare pattern map_ip_to_longlat;
map_ip_to_longlat("10.10.10.10")
Aplikasi menerima kesalahan berikut sebagai respons.
Satu atau beberapa referensi pola tidak dideklarasikan. Referensi pola yang terdeteksi: ["map_ip_to_longlat('10.10.10.10')"]
Memanggil pola
Aplikasi memeriksa kesalahan, menentukan bahwa kesalahan menunjukkan referensi pola yang hilang, dan mengambil alamat IP yang hilang (10.10.10.10). Ini menggunakan alamat IP untuk mencari data pengayaan dalam layanan internalnya dan membangun pola baru yang menentukan pemetaan alamat IP ke data bujur dan lintang yang sesuai. Pola baru ditambahkan ke kueri pengguna dan dijalankan lagi.
Kali ini kueri berhasil karena data pengayaan sekarang dideklarasikan dalam kueri, dan hasilnya dikirim ke pengguna.
Menjalankan kueri
declare pattern map_ip_to_longlat = (address:string)
{
("10.10.10.10") = { print Lat=37.405992, Long=-122.078515 };
};
map_ip_to_longlat("10.10.10.10")
Output
Lat | Long |
---|---|
37.405992 | -122.078515 |