Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
✅ Azure Stream Analytics ✅ Fabric Eventstream
Die MATCH_RECOGNIZE-Klausel wird verwendet, um nach einer Reihe von Ereignissen über einen Datenstrom zu suchen. Mit dieser Klausel können Sie Ereignismuster mithilfe regulärer Ausdrücke und aggregierter Methoden definieren, um Werte aus der Übereinstimmung zu überprüfen und zu extrahieren.
Das folgende Beispiel zeigt die grundlegende Struktur einer MATCH_RECOGNIZE-Klausel:
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 verfügt über eine übereinstimmende Ausgabe von ONE ROW PER MATCH als Standard, die nur verfügbar ist. Dies bedeutet, dass die Übereinstimmung ein einzelnes Zeilenergebnis pro Übereinstimmung erzeugt und nicht die Zeilen zurückgibt, die übereinstimmen.
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> ::=
{
* | + | ?
}
DAUER BEGRENZEN
Die Dauer des Grenzwerts wird verwendet, um ein Zeitfenster zu definieren, nach dem das Muster durchsucht werden soll. Die Ereignisse werden nach Zeit sortiert, und TIMESTAMP BY kann in der SELECT-Klausel verwendet werden, um das Zeitfeld anzugeben.
PARTITION NACH
PARTITION BY ermöglicht es, die Übereinstimmung über einen Spaltennamen zu schlüsseln und zu partitionieren. Eine Übereinstimmung erfolgt über jeden eindeutigen Schlüssel, der durch die Partitionsanweisung angegeben wird. Dadurch kann eine einzelne Abfrage über alle Schlüssel abgeglichen und separate Übereinstimmungen generiert werden, eine zu jedem Schlüssel.
NACH ÜBEREINSTIMMUNG MIT DER NÄCHSTEN ZEILE SPRINGEN
Diese Skip-Klausel definiert, dass, sobald ein Muster ab Ereignis S abgeglichen wird, beim nächsten Versuch, das Muster abzugleichen, bei Ereignis S+1 gestartet wird. Übereinstimmungen können sich in diesem Fall überlappen, da ein Muster den Anfang eines anderen Musters enthalten kann. Dies ist die einzige skip-Klausel verfügbar.
MAßNAHMEN
MEASURES wird verwendet, um die projizierten Werte aus der Übereinstimmung mithilfe von Aggregatmethoden zu definieren. Gibt z. B. den letzten id Wert aus, LAST(A.id) AS aid der über alle Ereignisse gefunden wurde, die mit dem in Feldnamen aidbenannten Muster übereinstimmenA.
Klassifizierungsfunktion
Die Klassifiziererfunktion kann in MEASURES zum Ausgeben von Musternamen verwendet werden, die mit Eingabeereignissen übereinstimmen. Die Funktion gibt eine Liste von Zeichenfolgen zurück, die jeweils mit dem Musternamen übereinstimmen, der einem Ereignis entspricht.
MUSTER
Das Muster definiert den regulären Ausdruck von Ereignissen, die über den Datenstrom durchsucht werden sollen. Mustervariablen sind benutzerdefinierte und durch Leerzeichen getrennt. Modifizierer wie + und * können verwendet werden, um die Häufigkeit einer Variablen beim Abgleichen von Ereignissen zu ändern.
Beispiel
PATTERN (A+ (B | C))
Das Muster in diesem Beispiel definiert mindestens einmal eine Variable A , gefolgt von einer Verkettung von B oder C.
Muster-Quantifizierer
Muster-Quantifizierer werden verwendet, um zu ändern, wie ein Muster im Datenstrom zugeordnet wird, wobei definiert wird, wie oft ein Muster gültig sein muss. Die folgenden Quantifizierer sind verfügbar:
- '*' - Null oder mehr Mal
- '+' – Mindestens ein Mal
- '?' – Null oder einmal
- '|' – Ein Muster oder ein anderes
Beispiel:
PATTERN (A? B+)
In diesem Beispiel wird A 0 oder 1 Uhrzeit definiert, gefolgt von B mindestens einmal.
DEFINIEREN
DEFINE gibt die Regeln an, die zum Abgleichen einer Mustervariablen mit einem Ereignis verwendet werden. Die Regeln sind boolesche Ausdrücke über aggregierte Werte aus dem Datenstrom.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
In diesem Beispiel werden die Regeln A und B definiert, wobei der LETZTE Wert von A größer als 5 ist, und B , wobei der LAST-Wert von A kleiner als der aktuelle Wert von B ist. Wenn sie keine Aggregatfunktion für den DEFINE-Ausdruck verwenden, wird das aktuelle ausgewertete Ereignis an die Mustervariable gebunden, z. B. bei B.bigint kommt der B-Wert aus dem aktuellen Ereignis, das ausgewertet wird.
Auf definierte Muster kann nur in der Reihenfolge zugegriffen werden, wenn Muster A vor Muster B definiert ist, kann A nicht auf B verweisen.
Erlaubt
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
Unstatthaft
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Aggregatmethoden
Die folgenden Aggregatmethoden können in MEASURES und DEFINE verwendet werden:
- Min – Die bisher aggregierte Mindestzahl.
- Max – Die bisher aggregierte maximale Zahl.
- First – Der erste aggregierte Wert.
- Last – Der letzte bisher aggregierte Wert.
Beispiel:
Das Auffüllen von Hochdrucktanks ist ein gefährlicher Prozess und muss genau überwacht werden, da der zunehmende Druck auf einen Tank auch seine Temperatur erhöht, der Druck muss stetig erhöht werden, damit der Tank beim Auffüllen abkühlt.
In diesem Beispiel möchte der Entwickler das Auffüllen eines Hochdrucktanks überwachen, da er mit dem Erhöhen des Drucks beginnt. Der Tank beginnt wieder aufzufüllen und kann den Druck nicht um seinen Doppelten in weniger als 3 Minuten erhöhen, andernfalls kann der Tank überhitzt und zu einem katastrophalen Ausfall führen.
Die folgende Abfrage kann verwendet werden, um den Fortschritt zu überwachen:
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
Diese Abfrage gleicht "Normal " mit jedem Ereignis ab, das den Tank füllt, und falls der Druck innerhalb von 3 Minuten über doppelt so hoch ist, als ein Ereignis mit dem maximalen Druckwert für das gefährliche Muster ausgelöst wird.
Einschränkungen
Nur Feldwerte können für Aggregate verwendet werden. Innerhalb eines Aggregataufrufs können keine Funktionen aufgerufen werden.
Erlaubt
... DEFINE A AS Max(A.value) > 5, ...Unstatthaft
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...Nur ein einzelnes Feld kann als Eingabeparameter für eine Aggregatfunktion bereitgestellt werden.
Erlaubt
... DEFINE A AS Max(A.value) > 5, ...Unstatthaft
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...