MATCH_RECOGNIZE (Stream Analytics)
A MATCH_RECOGNIZE záradékkal eseményeket kereshet egy adatfolyamon keresztül. Ez a záradék lehetővé teszi, hogy az eseménymintákat reguláris kifejezések és összesítő módszerek használatával határozza meg az egyezés értékeinek ellenőrzéséhez és kinyeréséhez.
Az alábbi példa egy MATCH_RECOGNIZE záradék alapstruktúráját mutatja be:
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 alapértelmezés szerint egy EGYSOROS EGYEZÉS egyező kimenettel rendelkezik, amely az egyetlen elérhető egyezés. Ez azt jelenti, hogy az egyezés egyezésenként egyetlen sor eredményt ad vissza, és nem adja vissza az egyeztetett sorokat.
Syntax
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> ::=
{
* | + | ?
}
KORLÁT IDŐTARTAMA
A korlát időtartama a keresendő minta időkeretének meghatározására szolgál. Az események idő szerint vannak rendezve, a TIMESTAMP BY pedig a SELECT záradékban használható az időmező megadásához.
PARTICIONÁLÁS
A PARTITION BY lehetővé teszi az egyezés kulcsát, és particionálást tesz lehetővé egy oszlopnév alapján. Egyezés történik a partícióutasítás által megadott összes egyedi kulccsal. Ez lehetővé teszi, hogy egyetlen lekérdezést egyeztessünk az összes kulcshoz, és külön egyezést hozzunk létre, egyet minden kulcshoz.
EGYEZÉS UTÁN UGRÁS A KÖVETKEZŐ SORRA
Ez a kihagyási záradék azt határozza meg, hogy ha egy minta megfelel az S eseménytől kezdve, a minta következő egyeztetési kísérlete az S+1 eseménynél kezdődik. Az egyezések átfedésben lehetnek ebben az esetben, mivel egy minta egy másik minta kezdetét is tartalmazhatja. Ez az egyetlen elérhető kihagyó záradék.
INTÉZKEDÉSEK
A MÉRTÉK függvény az egyezésből származó előre jelzett értékek összesítési metódusok használatával történő meghatározására szolgál. A rendszer például az összes olyan eseménynél az utolsó id
értéket adja ki, LAST(A.id) AS aid
amely megfelelt a mezőnévnek aid
nevezett A
mintának.
Osztályozó függvény
Az osztályozó függvény a MÉRTÉK függvényben használható a bemeneti eseményekhez illeszkedő mintanevek kimenetére. A függvény visszaadja a sztringek listáját, amelyek mindegyike az eseménynek megfelelő mintanévvel rendelkezik.
MINTA
A minta határozza meg az adatfolyamban keresendő események reguláris kifejezését. A mintaváltozók felhasználó által definiált és szóközzel elválasztott változók. A módosítók a + változók * gyakoriságának módosítására használhatók az események egyeztetésekor.
Példa
PATTERN (A+ (B | C))
A példában szereplő minta legalább egyszer definiál egy A változót, amelyet b vagy C összefűzése követ.
Mintakvantátorok
A mintakvantátorok segítségével módosíthatja, hogy egy minta hogyan legyen leképezve az adatfolyamban, meghatározva, hogy egy minta hányszor feleljen meg az érvényességnek. A következő kvantátorok érhetők el:
- '*' – Nulla vagy több alkalommal
- "+" – Egy vagy több alkalommal
- '?' – Nulla vagy egyszer
- '|' – Egy minta vagy egy másik
Példa
PATTERN (A? B+)
Ez a példa az A 0 vagy 1 időpontot, majd legalább egyszer a B-t határozza meg.
DEFINE
A DEFINE meghatározza azokat a szabályokat, amelyek egy mintaváltozónak egy eseményhez való felelnek meg. A szabályok logikai kifejezések az adatfolyam összesített értékein.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
Ez a példa az A és a B szabályt határozza meg, ahol az A UTOLSÓ értéke nagyobb, mint 5, a B pedig, ahol az A UTOLSÓ értéke kisebb, mint a B aktuális értéke. Ha nem használ aggregátumfüggvényt a DEFINE kifejezésben, a kiértékelendő aktuális esemény a mintaváltozóhoz kötődik, például a B.bigint esetében a B érték az aktuális kiértékelt eseményből származik.
A definiált minták csak sorrendben érhetők el, ha az A minta a B minta előtt van definiálva, az A nem hivatkozhat A-ra.
Engedélyezett
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
Nem engedélyezett
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Összesítő metódusok
A MÉRTÉKEK és a DEFINE függvényben a következő összesítő módszerek használhatók:
- Min – Az eddig összesített minimális szám.
- Max – Az eddig összesített maximális szám.
- Első – Az első összesített érték.
- Utolsó – Az eddig összesítve lévő utolsó érték.
Példa
A nagy nyomású tartályok feltöltése veszélyes folyamat, és szorosan figyelemmel kell kísérni, mivel a tartályra nehezedő nyomás is növeli a hőmérsékletet, a nyomásnak folyamatosan növelnie kell, hogy időt adjon a tartálynak a feltöltés során lehűlésre.
Ebben a példában a fejlesztő egy nagynyomású tartály feltöltését szeretné monitorozni, mivel az elkezdi növelni a nyomást. A tartály megkezdi az újratöltést, és kevesebb mint 3 perc alatt nem tudja növelni a nyomást a duplájával, különben a tartály túlmelegszik, és katasztrofális meghibásodást okozhat.
A folyamat monitorozásához a következő lekérdezés használható:
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
Ez a lekérdezés megfelel a Normál értéknek minden olyan eseményhez, amely kitölti a tartályt, és abban az esetben, ha a nyomás 3 percen belül meghaladja a normál töltés dupláját, mint egy esemény aktiválódik a Veszélyes minta legnagyobb nyomásértékével.
Korlátozások
Az összesítésekhez csak mezőértékek használhatók. Az összesítő híváson belül nem hívható meg függvény.
Engedélyezett
... DEFINE A AS Max(A.value) > 5, ...
Nem engedélyezett
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...
Bemeneti paraméterként csak egyetlen mező adható meg az összesítő függvénynek.
Engedélyezett
... DEFINE A AS Max(A.value) > 5, ...
Nem engedélyezett
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...