MEGFELELÉS_FELISMERÉSE

✅ Azure Stream Analytics ✅ Fabric Eventstream

A MATCH_RECOGNIZE záradék az adatfolyamon keresztüli események keresésére szolgál. Ez a záradék lehetővé teszi, hogy az eseménymintákat reguláris kifejezések és összesítő metódusok 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.

Szemantika

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, az IDŐBÉLYEGZŐ BY pedig a SELECT záradékban használható az időmező megadásához.

PARTICIONÁLÁS A KÖVETKEZŐ SZERINT:

A PARTITION BY lehetővé teszi az egyezés kulcsát és particionálását egy oszlopnév alapján. A partícióutasítás által megadott összes egyedi kulccsal egyezés történik. Ez lehetővé teszi, hogy egyetlen lekérdezés az összes kulcshoz illeszkedjen, és külön egyezést hozzon létre, egyet minden kulcshoz.

AZ 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 az S eseménytől kezdve egyezik, a következő kísérlet az S+1 eseménynél kezdődik. Az egyezések ebben az esetben átfedésben lehetnek, mivel egy minta egy másik minta kezdetét is tartalmazhatja. Ez az egyetlen kihagyó záradék, amely elérhető.

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 utolsó id értéket adja ki, LAST(A.id) AS aid amely a mezőnévbe aidelnevezett A mintával egyező összes eseményen található.

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 adatfolyamon 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 kedvelik + és * használhatók a változók gyakoriságának módosítására 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.

Minta-számszerűsítők

A mintakvantátorok a mintázatok adatfolyamban való leképezésének módosítására szolgálnak, meghatározva, hogy egy minta hányszor kell egyeznie ahhoz, hogy érvényes legyen. 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 A 0 vagy 1 időpontot határoz meg, amelyet legalább egyszer B követ.

DEFINIÁL

A DEFINE megadja azokat a szabályokat, amelyekkel egy mintaváltozó egy eseményhez illeszkedik. 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ályokat határozza meg, ahol az A UTOLSÓ értéke nagyobb, mint 5, a B pedig az A utolsó értéke kisebb, mint a B aktuális értéke. Ha a DEFINE kifejezéshez nem aggregátumfüggvényt használ, 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ékelendő 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),
...

Tilos

...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...

Összesítő metódusok

A MÉRTÉK és a DEFINE függvényben a következő összesítő metódusok 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ített utolsó érték.

példa:

A nagynyomású tartályok újratöltése veszélyes folyamat, és szoros megfigyelés alatt kell tartani, mivel a tartályra nehezedő nyomás is növeli a hőmérsékletet, a nyomásnak folyamatosan növekednie kell, hogy időt adjon a tartálynak a feltöltés során történő lehűlésre.

Ebben a példában a fejlesztő egy nagynyomású tartály újratöltését szeretné figyelni, 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 dupla nyomással, 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álnak minden olyan eseménynek, amely feltölti a tartályt, és ha a nyomás 3 percen belül meghaladja a normál töltés dupláját, akkor egy eseményt a veszélyes minta legnagyobb nyomásértékével aktiválnak.

Korlátozások

  • Csak a mezőértékek használhatók az összesítésekhez. Az összesítő híváson belül nem hívhatók függvények.

    Engedélyezett

    ...
    DEFINE
          A AS Max(A.value) > 5,
    ...
    

    Tilos

    ...
    DEFINE
          A AS Max(udf.myUdf(A.value)) > 5,
    ...
    
  • Bemeneti paraméterként csak egyetlen mező adható meg az összesítő függvényhez.

    Engedélyezett

    ...
        DEFINE
      	    A AS Max(A.value) > 5,
      ...    
    

    Tilos

      ...
      DEFINE
          A AS Max(A.value1 + A.value2) > 5,
      ...
    

Lásd még