Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
✅Eventstream prostředků infrastruktury Azure Stream Analytics ✅
Klauzule MATCH_RECOGNIZE slouží k vyhledání sady událostí přes datový proud. Tato klauzule umožňuje definovat vzory událostí pomocí regulárních výrazů a agregačních metod k ověření a extrahování hodnot z shody.
Následující příklad ukazuje základní strukturu klauzule 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 má odpovídající výstup jednoho řádku NA SHODU jako výchozí, což je jediná dostupná shoda. To znamená, že shoda vytvoří výsledek jednoho řádku pro každou shodu a nevrací odpovídající řádky.
Syntaxe
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> ::=
{
* | + | ?
}
LIMIT DURATION
Doba trvání limitu se používá k definování časového intervalu, na který se má vzor hledat. Události jsou seřazeny podle času a TIMESTAMP BY lze použít v klauzuli SELECT k určení časového pole.
ROZDĚLIT PODLE
FUNKCE PARTITION BY umožňuje, aby se shoda shodovala a dělila podle názvu sloupce. Shoda bude probíhat u každého jedinečného klíče určeného příkazem partition. To umožňuje, aby se jeden dotaz shodoval se všemi klíči a vygeneroval samostatné shody, jeden ke každému klíči.
PO PŘESKOČENÍ SHODY NA DALŠÍ ŘÁDEK
Tato klauzule skip definuje, že jakmile se vzor porovná od události S, začne další pokus o shodu vzoru na události S+1. Shody se v tomto případě můžou překrývat, protože vzor může obsahovat začátek jiného vzoru uvnitř. Toto je jediná dostupná klauzule skip.
OPATŘENÍ
MÍRY se používají k definování předpokládaných hodnot z shody pomocí agregačních metod. Zobrazí se například LAST(A.id) AS aid výstup poslední id hodnoty nalezené u všech událostí, které odpovídají vzoru pojmenovaného A do názvu aidpole .
Klasifikátor – funkce
Funkci klasifikátoru lze použít v nástroji MÍRY k výstupním názvům vzorů, které odpovídají vstupním událostem. Funkce vrátí seznam řetězců, z nichž každý má název vzoru odpovídající události.
VZOR
Vzor definuje regulární výraz událostí, které se mají prohledávat přes datový proud. Proměnné vzoru jsou uživatelsky definované a oddělené mezerami. Modifikátory jako + a * lze je použít k úpravě frekvence proměnné při porovnávání událostí.
Příklad
PATTERN (A+ (B | C))
Vzor v tomto příkladu definuje proměnnou A alespoň jednou následovanou zřetězením B nebo C.
Kvantifikátory vzorů
Kvantifikátory vzorů se používají ke změně způsobu mapování vzoru v datovém streamu a definují, kolikrát se vzor musí shodovat, aby byl platný. K dispozici jsou následující kvantifikátory:
- *- nulakrát nebo vícekrát
- +- jednou nebo vícekrát
- '?' – nula nebo jednou
- | – jeden vzor nebo jiný
Příklad:
PATTERN (A? B+)
Tento příklad definuje A 0 nebo 1 čas následovaný A alespoň jednou.
DEFINOVAT
DEFINE určuje pravidla, která odpovídají proměnné vzoru události. Pravidla jsou logické výrazy nad agregovanými hodnotami z datového streamu.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
Tento příklad definuje pravidla A a B , kde poslední hodnota A je větší než 5 a B , kde poslední hodnota A je menší než aktuální hodnota B. Pokud ve výrazu DEFINE nepoužíváte agregační funkci, aktuální událost, která se vyhodnocuje, vytvoří vazbu na proměnnou vzoru, například u B.bigint , hodnota B pochází z vyhodnocení aktuální události.
Definované vzory lze přistupovat pouze v pořadí, pokud je vzor A definován před vzorem B, A nemůže odkazovat na B.
Povolený
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
Nepovoleno
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Agregační metody
V nástrojích MEASURES a DEFINE lze použít následující agregační metody:
- Min – zatím agregované minimální číslo.
- Max – maximální počet agregovaných doposud.
- První – první hodnota agregovaná.
- Poslední – poslední hodnota se zatím agregovala.
Příklad:
Přeplňování vysokotlakých nádrží je nebezpečný proces a je třeba je pečlivě monitorovat, protože zvýšení tlaku na nádrži také zvyšuje teplotu, tlak se musí trvale zvýšit, aby se nádrž při opětovném naplnění vychladila.
V tomto příkladu chce vývojář monitorovat naplnění vysokotlaké nádrže, protože začne zvyšovat tlak. Nádrž začne znovu vyplňovat a nemůže zvýšit tlak o jeho dvojitou hodnotu za méně než 3 minuty, jinak se nádrž přehřívá a může způsobit katastrofální selhání.
K monitorování průběhu můžete použít následující dotaz:
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
Tento dotaz odpovídá normální události, která naplňuje nádrž, a v případě, že je tlak dvakrát nad normálním plněním během 3 minut, než je událost aktivována s maximálním čtením tlaku pro nebezpečný vzor.
Omezení
Pro agregace lze použít pouze hodnoty polí. Uvnitř agregovaného volání nelze volat žádné funkce.
Povolený
... DEFINE A AS Max(A.value) > 5, ...Nepovoleno
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...Jako vstupní parametr lze jako vstupní parametr zadat pouze jedno pole.
Povolený
... DEFINE A AS Max(A.value) > 5, ...Nepovoleno
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...