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.
✅ Azure Stream Analytics ✅ Fabric Eventstream
Klausa MATCH_RECOGNIZE digunakan untuk mencari serangkaian peristiwa melalui aliran data. Klausa ini memungkinkan Anda menentukan pola peristiwa menggunakan ekspresi reguler dan metode agregat untuk memverifikasi dan mengekstrak nilai dari kecocokan.
Contoh berikut menunjukkan struktur dasar klausa MATCH_RECOGNIZE:
SELECT *
INTO output FROM input TIMESTAMP BY time
MATCH_RECOGNIZE (
LIMIT DURATION (minute, 1)
PARTITION BY tollBoothId
MEASURES
Last(Toyota.LicensePlate) AS toyotaLicensePlate,
Last(Lexus.LicensePlate) AS lexusLicensePlate
AFTER MATCH SKIP TO NEXT ROW
PATTERN (Toyota+ Ford* Lexus+)
DEFINE
Toyota AS Toyota.make = 'Toyota',
Ford AS Ford.make = 'Ford',
Lexus AS Lexus.make = 'Lexus'
) AS T
MATCH_RECOGNIZE memiliki output yang cocok dari ONE ROW PER MATCH sebagai default, yang merupakan satu-satunya pencocokan yang tersedia. Ini berarti kecocokan menghasilkan satu hasil baris per kecocokan dan tidak mengembalikan baris yang cocok.
Sintaksis
SELECT_star_query_definition
MATCH_RECOGNIZE (
LIMIT DURATION (time_unit, time)
PARTITION BY column_alias
MEASURES
expression AS column_alias [,...n]
AFTER MATCH SKIP TO NEXT ROW
PATTERN ( <pattern_group> )
DEFINE
pattern_name AS boolean_expression [,…n]
) AS column_alias
<pattern_group> ::=
{
<pattern_name_modifier> [ | <pattern_group> ]*
}
<pattern_name_modifier> ::=
{
<pattern_atom> [ <pattern_atom> ]*
}
<pattern_atom> ::=
{
[ pattern_name | ( <pattern_group> ) ] [ <pattern_modifier> ]?
}
<pattern_name> :: =
{
name | .
}
<pattern_modifier> ::=
{
* | + | ?
}
BATAS DURASI
Durasi batas digunakan untuk menentukan jendela waktu untuk pola yang akan dicari. Peristiwa diurutkan menurut waktu dan TIMESTAMP BY dapat digunakan pada klausa SELECT untuk menentukan bidang waktu.
PARTISI BERDASARKAN
PARTITION BY memungkinkan kecocokan untuk di-key dan dipartisi melalui nama kolom. Kecocokan akan terjadi pada setiap kunci unik yang ditentukan oleh pernyataan partisi. Ini memungkinkan satu kueri dicocokkan di semua kunci dan menghasilkan kecocokan terpisah, satu ke setiap kunci.
SETELAH KECOCOKAN LEWATI KE BARIS BERIKUTNYA
Klausa skip ini mendefinisikan bahwa setelah pola dicocokkan dimulai pada peristiwa S, pola percobaan berikutnya untuk mencocokkan akan dimulai pada peristiwa S+1. Kecocokan dapat tumpang tindih dalam kasus ini karena pola dapat berisi awal pola lain di dalamnya. Ini adalah satu-satunya klausul lewati yang tersedia.
LANGKAH
PENGUKURAN digunakan untuk menentukan nilai yang diproyeksikan dari kecocokan menggunakan metode agregat. Misalnya, LAST(A.id) AS aid akan menghasilkan nilai terakhir id yang ditemukan di semua peristiwa yang cocok dengan pola yang dinamai A dengan nama aidbidang .
Fungsi pengklasifikasi
Fungsi pengklasifikasi dapat digunakan dalam PENGUKURAN untuk menghasilkan nama pola yang cocok dengan peristiwa input. Fungsi mengembalikan daftar string, masing-masing dengan nama pola yang cocok dengan peristiwa.
POLA
Pola menentukan ekspresi reguler peristiwa yang akan dicari melalui aliran data. Variabel pola ditentukan pengguna dan dipisahkan oleh spasi. Pengubah seperti + dan * dapat digunakan untuk memodifikasi frekuensi variabel saat mencocokkan peristiwa.
Contoh
PATTERN (A+ (B | C))
Pola pada contoh ini mendefinisikan variabel A setidaknya sekali, diikuti dengan perangkaian B atau C.
Pengukur Pola
Kuantifier pola digunakan untuk mengubah bagaimana pola dipetakan dalam aliran data, menentukan berapa kali pola perlu dicocokkan agar valid. Kuantifier berikut tersedia:
- '*' - Nol atau lebih kali
- '+' - Satu atau beberapa kali
- '?' – Nol atau satu kali
- '|' - Satu pola atau pola lainnya
Contoh:
PATTERN (A? B+)
Contoh ini mendefinisikan A 0 atau 1 kali diikuti oleh B setidaknya sekali.
DEFINE
DEFINE menentukan aturan yang digunakan untuk mencocokkan variabel pola dengan peristiwa. Aturannya adalah ekspresi Boolean atas nilai agregat dari aliran data.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
Contoh ini mendefinisikan aturan A dan B di mana nilai TERAKHIR A lebih besar dari 5, dan B di mana nilai TERAKHIR A lebih kecil dari nilai B saat ini. Saat tidak menggunakan fungsi agregat pada ekspresi DEFINE, peristiwa saat ini sedang dievaluasi mengikat ke variabel pola, misalnya, pada B.bigint , nilai B berasal dari peristiwa saat ini yang dievaluasi.
Pola yang ditentukan hanya dapat diakses secara berurutan, jika pola A ditentukan sebelum pola B, A tidak dapat mereferensikan B.
Diperbolehkan
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
Dilarang
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Metode Agregat
Metode agregat berikut dapat digunakan dalam MEASURES dan DEFINE:
- Min – Angka minimum yang dikumpulkan sejauh ini.
- Maks – Angka maksimum yang diagregasi sejauh ini.
- Pertama – Nilai pertama diagregasi.
- Terakhir – Nilai terakhir yang dikumpulkan sejauh ini.
Contoh:
Mengisi ulang tangki bertekanan tinggi adalah proses berbahaya dan perlu dipantau dengan cermat karena meningkatkan tekanan pada tangki juga meningkatkan suhunya, tekanan perlu meningkat terus untuk memberikan waktu bagi tangki untuk mendingin saat mengisi ulang.
Dalam contoh ini, pengembang ingin memantau pengisian ulang tangki tekanan tinggi saat mulai meningkatkan tekanan. Tangki mulai mengisi ulang dan tidak dapat meningkatkan tekanan dengan gandanya dalam waktu kurang dari 3 menit, jika tidak, tangki terlalu panas dan dapat menyebabkan kegagalan bencana.
Kueri berikut dapat digunakan untuk memantau kemajuan:
SELECT *
INTO output FROM input TIMESTAMP BY time
MATCH_RECOGNIZE (
LIMIT DURATION (minute, 3)
MEASURES
MAX(Dangerous.pressure) as pressure,
Classifier() as patterns
AFTER MATCH SKIP TO NEXT ROW
PATTERN (Normal+ Dangerous+)
DEFINE
Normal AS Normal.isFilling = 1,
Dangerous AS Max(Dangerous.pressure) > 2* Max(Normal.pressure)
) AS T
Kueri ini cocok dengan Normal dengan peristiwa apa pun yang mengisi tangki dan jika tekanan lebih dari dua kali lipat dari pengisian Normal dalam waktu 3 menit, daripada peristiwa ditembakkan dengan pembacaan tekanan maksimum untuk pola Berbahaya .
Keterbatasan
Hanya nilai bidang yang dapat digunakan untuk agregat. Tidak ada fungsi yang dapat dipanggil di dalam panggilan agregat.
Diperbolehkan
... DEFINE A AS Max(A.value) > 5, ...Dilarang
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...Hanya satu bidang yang dapat disediakan ke fungsi agregat sebagai parameter input.
Diperbolehkan
... DEFINE A AS Max(A.value) > 5, ...Dilarang
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...