Pernyataan pattern

Pola adalah konstruksi yang memetakan tuple string ke ekspresi tabular. Setiap pola harus mendeklarasikan nama pola dan secara opsional menentukan pemetaan pola. Pola yang menentukan pemetaan akan menampilkan ekspresi tabular saat dipanggil. Setiap dua pernyataan harus dipisahkan oleh titik koma.

Pola kosong adalah pola yang dideklarasikan, tetapi tidak menentukan pemetaan. Ketika dipanggil, pola tersebut menampilkan kesalahan SEM0036 bersama dengan perincian definisi pola yang hilang di header HTTP. Aplikasi tingkat menengah yang memberikan pengalaman Bahasa Kueri Kusto (KQL) dapat menggunakan detail yang ditampilkan sebagai bagian dari prosesnya untuk memperkaya hasil kueri KQL. Untuk informasi selengkapnya, lihat Bekerja dengan aplikasi tingkat menengah.

Sintaks

  • Mendeklarasikan pola kosong:

    declarepatternPatternName;

  • Mendeklarasikan dan menentukan pola:

    declarepatternPatternName = (ArgName:ArgType [, ... ]) [[PathName:PathArgType]]

    {

          (ArgValue1_1 [,ArgValue2_1, ... ] ) [ .[PathValue_1] ] ={expression1};

        [ (ArgValue1_2 [,ArgValue2_2, ... ] ) [ .[PathValue_2] ] ={expression2}; ... ]

    } ;

  • Memanggil pola:

    • PatternName(ArgValue1 [,ArgValue2 ...] ).PathValue
    • PatternName(ArgValue1 [,ArgValue2 ...] ).["PathValue"]

Pelajari selengkapnya tentang konvensi sintaksis.

Parameter

Nama Jenis Diperlukan Deskripsi
PatternName string ✔️ Nama pola.
ArgName string ✔️ Nama argumen. Pola dapat memiliki satu atau beberapa argumen.
ArgType string ✔️ Jenis data skalar dari argumen ArgName. Nilai yang memungkinkan: string
PathName string Nama argumen jalur. Pola boleh tidak memiliki jalan atau memiliki satu jalan.
PathArgType string Jenis argumen PathArgType. Nilai yang memungkinkan: string
ArgValue string ✔️ Nilai tupel ArgName dan PathName opsional akan dipetakan ke expression.
PathValue string Nilai yang akan dipetakan untuk PathName.
ekspresi string ✔️ Ekspresi dalam tabel atau lambda yang mereferensikan fungsi menampilkan data tabular. Misalnya: Logs | where Timestamp > ago(1h)

Contoh

Di tiap-tiap contoh berikut, pola dideklarasikan, ditentukan, lalu dipanggil.

Tentukan pola sederhana

Contoh berikut mendefinisikan pola yang memetakan status ke ekspresi yang mengembalikan ibu kota/kota utamanya.

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

Capital
Edmonton

Contoh berikut menentukan pola yang menentukan beberapa data aplikasi yang dicakup.

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

Aplikasi Data Metrik
App #2 9
App #2 8
App #2 7
App #2 6
App #2 5
App #1 0.53674122855537532
App #1 0.78304713305654439
App #1 0.20168860732346555
App #1 0.13249123867679469
App #1 0.19388305330563443

Normalisasi kasus

Ada variasi sintaks untuk memanggil pola. Misalnya, gabungan berikut menampilkan satu ekspresi pola 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 menampilkan 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

Menampilkan kesalahan semantik

Satu atau beberapa referensi pola tidak dideklarasikan. Referensi pola terdeteksi: ["app('ApplicationX').['*']"]

Bekerja dengan aplikasi tingkat menengah

Aplikasi tingkat menengah memberi penggunanya kemampuan untuk menggunakan KQL dan ingin meningkatkan kualitas pengalamannya dengan memperkaya hasil kueri dengan data tambahan dari layanan internalnya.

Untuk mencapai tujuan ini, aplikasi memberi pengguna pernyataan pola yang menampilkan data dalam tabel yang dapat digunakan pengguna dalam kuerinya. Argumen pola adalah kunci yang akan digunakan oleh aplikasi untuk mengambil data pengayaan. Saat pengguna menjalankan kueri, aplikasi tidak menguraikan kueri itu sendiri tetapi berencana untuk memanfaatkan kesalahan yang ditampilkan oleh pola kosong untuk mengambil kunci yang diperlukan aplikasi itu. Jadi ini menambahkan kueri 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 ini menambahkan definisi baru ke kueri pengguna, mengirimkannya ulang untuk diproses, dan menampilkan hasil yang diterimanya kepada pengguna.

Contoh

Dalam contoh berikut, aplikasi tingkat menengah menyediakan kemampuan untuk 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 untuk tujuan ini. Misalkan aplikasi tersebut mendapatkan kueri berikut dari pengguna:

map_ip_to_longlat("10.10.10.10")

Aplikasi tersebut tidak menguraikan kueri ini dan oleh karena itu aplikasi tersebut tidak mengetahui alamat IP mana (10.10.10.10) yang diteruskan ke pola. Jadi, aplikasi ini 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 tersebut menerima kesalahan berikut sebagai tanggapan.

Satu atau beberapa referensi pola tidak dideklarasikan. Referensi pola yang terdeteksi: ["map_ip_to_longlat('10.10.10.10')"]

Aplikasi tersebut memeriksa kesalahan, menentukan bahwa kesalahan itu menunjukkan referensi pola yang hilang, dan mengambil alamat IP yang hilang (10.10.10.10). Aplikasi tersebut menggunakan alamat IP untuk mencari data pengayaan dalam layanan internalnya dan membuat pola baru yang menentukan pemetaan alamat IP ke data bujur dan lintang yang sesuai. Pola baru ini ditambahkan ke kueri pengguna dan dijalankan lagi. Kali ini, kueri berhasil karena data pengayaan sekarang dideklarasikan dalam kueri, dan hasilnya dikirimkan kepada pengguna.

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

Lintang Long
37.405992 -122.078515

Kemampuan ini tidak didukung di Azure Monitor.