LAST (Azure Stream Analytics)
L’opérateur d’analyse LAST permet de rechercher l’événement le plus récent dans un flux d’événements dans des contraintes définies. Il est utile dans les scénarios tels que le calcul de la dernière bonne valeur connue (par exemple, non null), la recherche de l’heure de la dernière fois où l’événement correspond à certains critères, etc.
Dans Stream Analytics, l’étendue de LAST (c’est-à-dire la distance dans l’historique de l’événement actuel qu’il doit examiner) est toujours limitée à un intervalle de temps fini, à l’aide de la clause LIMIT DURATION. LAST peut éventuellement être limité à prendre en compte uniquement les événements qui correspondent à l’événement actuel sur une certaine propriété ou condition à l’aide des clauses PARTITION BY et WHEN. LAST 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.
Remarque: LAST(<expression>, <default>) équivaut à LAG(<expression>, 0, <default>) (valeur de décalage définie sur '0'). Notez que LAG (<expression>, 0, <valeur par défaut>) n’est en fait pas une construction valide, car LAG prend un décalage supérieur ou égal à 1. Par conséquent, vous devez utiliser l’opérateur LAST à la place, qui a été introduit pour plus de commodité et une meilleure lisibilité.
Syntaxe
LAST(<scalar_expression >, [<default>])
OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])
Arguments
scalar_expression
Valeur à retourner. Il s'agit soit d'une expression de tout type, qui renvoie une valeur (scalaire) unique, soit de l'expression générique « * ». Pour « * », l’événement entier est retourné et est contenu dans l’événement de résultat (enregistrement imbriqué). scalar_expression ne peut pas contenir d’autres fonctions analytiques ou de fonctions externes.
default
Valeur à retourner en l’absence de critères de correspondance d’événement. Si aucune valeur par défaut n'est spécifiée, la valeur NULL est renvoyée. « Aucun événement » peut être le cas s’il n’y a pas d’événements antérieurs dans l’intervalle de temps spécifié dans le limit_duration_clause ou si l’événement existe mais ne correspond pas à la condition spécifiée dans le when_clause. Si l’événement existe et que la valeur de scalar_expression est NULL, null est retourné. default 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. default doit avoir exactement le même type que scalar_expression.
OVER ( [ clause_partition_by ] clause_limit_duration [clause_when])
partition_by_clause La clause de clé> de partition PARTITION BY <demande uniquement aux événements dont la valeur est
<la clé> de partition est la même que celle de l’événement actuel à considérer.
limit_duration_clause 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. S’il n’y a 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 dernier calcul. Si aucun événement correspondant n’est trouvé dans l’intervalle DURATION, la <valeur par défaut> est retournée. La when_clause est facultative.
Types de retour
Type de données de la valeur scalar_expression spécifiée. NULL est renvoyé si scalar_expression
Remarques d'ordre général
LAST n’est pas déterministe. Les événements sont traités dans l'ordre temporel. S'il existe plusieurs événements avec le même horodatage, ils sont traités dans l'ordre d'arrivée.
L’application de LAST 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, il sera différent de l’attribut d’heure d’événement d’origine. Si LAST ne peut pas être déplacé avant l’opération de fenêtre, envisagez d’utiliser CollectTop, en fonction de l’heure de l’événement d’origine.
Exemples
Recherchez la plus récente lecture du capteur non null :
SELECT
sensorId,
LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)
FROM input
Dernière heure de la lecture supérieure à 50 :
SELECT
sensorId,
LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input
Voir aussi
ISFIRST (Azure Stream Analytics)
LAG (Azure Stream Analytics)