Bagikan melalui


Pernyataan pola

Berlaku untuk: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 ; PatternName

  • Deklarasikan 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"]

Pelajari selengkapnya tentang konvensi sintaks .

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 mungkin: string
PathName string Nama argumen jalur. Pola tidak dapat memiliki jalur atau satu jalur.
PathArgType string Jenis argumen PathArgType. Nilai yang mungkin: string
ArgValue string ✔️ Nilai ArgName dan tuple opsional untuk dipetakan ke ekspresi .
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