Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
✅ Azure Stream Analytics ✅ Fabric Eventstream
La clause MATCH_RECOGNIZE est utilisée pour rechercher un ensemble d’événements sur un flux de données. Cette clause vous permet de définir des modèles d’événements à l’aide d’expressions régulières et de méthodes d’agrégation pour vérifier et extraire des valeurs de la correspondance.
L’exemple suivant montre la structure de base d’une clause 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 a une sortie correspondante d’UNE LIGNE PAR CORRESPONDANCE comme valeur par défaut, qui est la seule mise en correspondance disponible. Cela signifie que la correspondance produit un résultat de ligne unique par correspondance et ne retourne pas les lignes mises en correspondance.
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> ::=
{
* | + | ?
}
DURÉE LIMITE
La durée limite est utilisée pour définir une fenêtre de temps pour que le modèle soit recherché. Les événements sont classés par heure et TIMESTAMP BY peuvent être utilisés sur la clause SELECT pour spécifier le champ d’heure.
PARTITION BY
PARTITION BY permet à la correspondance d’être clé et partitionnée sur un nom de colonne. Une correspondance se produit sur chaque clé unique spécifiée par l’instruction de partition. Cela permet à une requête unique d’être mise en correspondance sur toutes les clés et de générer des correspondances distinctes, une à chaque clé.
APRÈS LA CORRESPONDANCE PASSE À LA LIGNE SUIVANTE
Cette clause skip définit qu’une fois qu’un modèle est mis en correspondance à partir de l’événement S, la prochaine tentative de correspondance démarre à l’événement S+1. Les correspondances peuvent se chevaucher dans ce cas, car un modèle peut contenir le début d’un autre modèle à l’intérieur. Il s’agit de la seule clause skip disponible.
DISPOSITIONS
MEASURES est utilisé pour définir les valeurs projetées à partir de la correspondance à l’aide de méthodes d’agrégation. Par exemple, LAST(A.id) AS aid génère la dernière id valeur trouvée sur tous les événements qui correspondent au modèle nommé A dans le nom aiddu champ.
Fonction de classification
La fonction classifieur peut être utilisée dans MEASURES pour générer des noms de modèles mis en correspondance avec les événements d’entrée. La fonction retourne une liste de chaînes, chacune avec le nom du modèle correspondant à un événement.
MODÈLE
Le modèle définit l’expression régulière des événements à rechercher sur le flux de données. Les variables de modèle sont définies par l’utilisateur et séparées par des espaces. Les modificateurs comme + et * peuvent être utilisés pour modifier la fréquence d’une variable lors de la correspondance d’événements.
Exemple :
PATTERN (A+ (B | C))
Le modèle de cet exemple définit une variable A au moins une fois, suivie d’une concaténation de B ou C.
Quantificateurs de modèle
Les quantificateurs de modèle sont utilisés pour modifier la façon dont un modèle est mappé dans le flux de données, en définissant le nombre de fois où un modèle doit correspondre pour être valide. Les quantificateurs suivants sont disponibles :
- '*' - Zéro ou plus de fois
- '+' - Une ou plusieurs fois
- ' ?' – Zéro ou une fois
- '|' - Un modèle ou un autre
Exemple :
PATTERN (A? B+)
Cet exemple définit A 0 ou 1 fois suivi de B au moins une fois.
DÉFINIR
DEFINE spécifie les règles utilisées pour faire correspondre une variable de modèle à un événement. Les règles sont des expressions booléennes sur des valeurs agrégées à partir du flux de données.
DEFINE
A AS Last(A.bigint) > 5,
B AS Last(A.bigint) < B.bigint
Cet exemple définit les règles A et B où la valeur LAST d’A est supérieure à 5, et B où la valeur LAST d’A est inférieure à la valeur actuelle de B. Lorsque vous n’utilisez pas de fonction d’agrégation sur l’expression DEFINE, l’événement actuel en cours d’évaluation est lié à la variable de modèle, par exemple, sur B.bigint , la valeur B provient de l’événement actuel évalué.
Les modèles définis sont accessibles uniquement dans l’ordre, si le modèle A est défini avant le modèle B, A ne peut pas référencer B.
Autorisé
...
DEFINE
A AS Last(A.value),
B AS Max(A.value) + Max(B.value),
...
Non autorisé
...
DEFINE
A AS Last(A.value) + Last(B.Value),
B AS Max(A.value) + Max(B.value),
...
Méthodes d’agrégation
Les méthodes d’agrégation suivantes peuvent être utilisées dans MEASURES et DEFINE :
- Min : nombre minimal agrégé jusqu’à présent.
- Max : nombre maximal agrégé jusqu’à présent.
- Tout d’abord : première valeur agrégée.
- Last : dernière valeur agrégée jusqu’à présent.
Exemple :
Le remplissage de réservoirs à haute pression est un processus dangereux et doit être surveillé de près, car l’augmentation de la pression sur un réservoir augmente également sa température, la pression doit augmenter régulièrement pour donner du temps au réservoir de refroidir pendant le remplissage.
Dans cet exemple, le développeur souhaite surveiller le remplissage d’un réservoir à haute pression au fur et à mesure qu’il commence à augmenter la pression. Le réservoir commence à recharger et ne peut pas augmenter la pression par son double en moins de 3 minutes, sinon le réservoir surchauffe et pourrait provoquer une défaillance catastrophique.
La requête suivante peut être utilisée pour surveiller la progression :
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
Cette requête correspond à normal à n’importe quel événement qui remplit le réservoir et, si la pression est supérieure au double d’un remplissage normal dans les 3 minutes, qu’un événement est déclenché avec la lecture maximale de la pression pour le modèle dangereux .
Limites
Seules les valeurs de champ peuvent être utilisées pour les agrégats. Aucune fonction ne peut être appelée à l’intérieur d’un appel d’agrégation.
Autorisé
... DEFINE A AS Max(A.value) > 5, ...Non autorisé
... DEFINE A AS Max(udf.myUdf(A.value)) > 5, ...Un seul champ peut être fourni à une fonction d’agrégation en tant que paramètre d’entrée.
Autorisé
... DEFINE A AS Max(A.value) > 5, ...Non autorisé
... DEFINE A AS Max(A.value1 + A.value2) > 5, ...