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
L’opérateur analytique LAG permet de rechercher un événement « précédent » dans un flux d’événements, dans certaines contraintes. Il est très utile de calculer le taux de croissance d’une variable, de détecter lorsqu’une variable franchit un seuil ou lorsqu’une condition démarre ou cesse d’être vraie.
Dans Stream Analytics, l’étendue du LAG (autrement dit, jusqu’à quel point l’historique de l’événement actuel doit être regardé) est toujours limitée à un intervalle de temps fini, à l’aide de la clause LIMIT DURATION. Le lag peut éventuellement être limité pour considérer uniquement les événements qui correspondent à l’événement actuel sur une propriété ou une condition spécifique à l’aide des clauses PARTITION BY et WHEN.
LAG n’est pas affecté par les prédicats dans la clause WHERE, les conditions de jointure dans la clause JOIN ou le regroupement d’expressions dans la clause GROUP BY de la requête actuelle, car elle est évaluée avant ces clauses.
Syntaxe
LAG(<scalar_expression >, [<offset >], [<default>])
OVER ([PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])
Par exemple:
LAG(reading) OVER (LIMIT DURATION(hour, 3))
LAG(name, 2, 'none such') OVER (PARTITION BY userId LIMIT DURATION(minute, 2))
Les arguments
scalar_expression
Valeur à retourner en fonction du décalage spécifié. Il s’agit d’une expression de tout type qui retourne une valeur unique (scalaire) ou l’expression générique '*'. Pour ' * ' l’événement entier en fonction du décalage spécifié sera retourné et sera contenu dans l’événement de résultat (enregistrement imbriqué).
scalar_expression ne peut pas contenir d’autres fonctions analytiques ou fonctions externes.
compenser
Nombre d’événements de retour à partir de l’événement actuel à partir duquel obtenir une valeur. S’il n’est pas spécifié, la valeur par défaut est 1, ce qui signifie qu’elle retourne l’événement précédent. Le décalage doit être un entier supérieur ou égal à 1. Les événements sont traités dans l’ordre temporel. S’il existe plusieurs événements avec les mêmes événements d’horodatage sont traités dans l’ordre d’arrivée.
par défaut
Valeur à retourner lorsqu’il n’existe aucun événement au décalage spécifié. Si aucune valeur par défaut n'est spécifiée, la valeur NULL est renvoyée. « Aucun événement au décalage spécifié » ne peut être le cas 1) si le nombre d’événements correspondants affichés jusqu’à présent est inférieur au décalage spécifié ou 2) si l’événement au décalage spécifié est dépassé en fonction des événements spécifiés limit_duration_clause 3) existent, mais ne correspondent pas à la condition booléenne spécifiée dans la when_clause.
Si l’événement au décalage spécifié existe et que la valeur de scalar_expression est NULL, null
est retourné. la valeur par défaut peut être une colonne, une sous-requête ou une autre expression, mais elle ne peut pas contenir d’autres
fonctions analytiques ou fonctions externes. la valeur par défaut doit avoir exactement le même type que
scalar_expression.
OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])
partition_by_clause La clause de clé> de partition PARTITION BY <demande que seuls les événements dont la valeur est
<la clé> de partition est la même que celle de l’événement actuel. Par exemple,
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
retourne la lecture précédente du même capteur que l’événement actuel (si tel s’est produit au cours de l’heure précédente).
clause limit_duration DURATION(<unité>, <length>)
Spécifie la quantité de l’historique de l’événement actuel à prendre en compte. Consultez DATEDIFF pour obtenir une description détaillée des unités prises en charge et de leurs abréviations. Si vous ne trouvez pas suffisamment d’événements correspondants dans l’intervalle DURATION, la <valeur par défaut> est retournée.
when_clause
Spécifie la condition booléenne pour les événements à prendre en compte dans le calcul LAG. Si vous ne trouvez pas suffisamment d’événements correspondants dans l’intervalle DURATION, la <valeur par défaut> est retournée. La when_clause est facultative.
Types de retour
Type de données du scalar_expression spécifié. NULL est retourné si scalar_expression
Remarques d'ordre général
LAG n'est pas déterministe. Les événements sont traités dans l’ordre temporel. S’il existe plusieurs événements avec les mêmes événements d’horodatage sont traités dans l’ordre d’arrivée.
L’application du groupe de résultats sur le jeu de résultats d’une fonction de fenêtrage peut produire des résultats inattendus. Les fonctions de fenêtrage modifient l’horodatage des événements, car chaque opération de fenêtre génère un événement à la fin de la fenêtre. L’horodatage actuel d’un événement est accessible avec system.timestamp(), après une opération de fenêtre, elle diffère de l’attribut d’heure d’événement d’origine. Si le LAG ne peut pas être déplacé avant l’opération de fenêtre, envisagez d’utiliser CollectTop, en triant par heure d’événement d’origine.
Exemples
Calculez le taux de croissance, par capteur :
SELECT sensorId,
growth = reading -
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM input
Recherchez la lecture précédente du capteur non Null :
SELECT
sensorId,
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)
FROM input
Recherchez la lecture précédente du capteur non Null pour un type de capteur spécifique :
WITH filterSensor AS
(
SELECT *
FROM input
WHERE input.sensorType = 4 AND sensorId IS NOT NULL
)
SELECT
LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1))
FROM filterSensor
Déterminez quand une variable dépasse un seuil :
SELECT
sensorId, reading
FROM input
WHERE
devicetype = 'thermostat'
AND reading > 100
AND LAG(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN devicetype = 'thermostat') <= 100