Comprendre les fonctions de fenêtre

Effectué

L’un des objectifs courants du traitement de flux est d’agréger les événements en intervalles temporels, ou fenêtres. Il s’agit par exemple de compter le nombre de publications sur les réseaux sociaux par minute ou de calculer la pluviométrie moyenne par heure.

Azure Stream Analytics intègre la prise en charge native de cinq types de fonctions de fenêtrage temporelles. Ces fonctions vous permettent de définir des intervalles temporels dans lesquels les données sont agrégées dans une requête. Les fonctions de fenêtrage prises en charge sont Tumbling (Bascule), Hopping (Récurrente), Sliding (Glissante), Session et Snapshot (Instantané).

Bascule

Les fonctions de fenêtrage de type Bascule segmentent un flux de données en une série contiguë de segments de temps à taille fixe et sans chevauchement et exécutent des opérations dessus. Les événements ne peuvent pas appartenir à plus d’une fenêtre bascule.

A diagram illustrating a stream with a series of events mapped into 1-minute tumbling windows.

L’exemple de fenêtre bascule, représenté par la requête ci-dessous, recherche la valeur de lecture maximale dans chaque fenêtre d’une minute. Les fonctions de fenêtrage sont appliquées dans les travaux Stream Analytics à l’aide de la clause GROUP BY de la syntaxe de requête. La clause GROUP BY dans la requête ci-dessous contient la fonction TumblingWindow(), qui spécifie une taille de fenêtre d’une minute.

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)

Récurrente

Les fonctions de fenêtre récurrente représentent les fenêtres qui se chevauchent planifiées, avançant dans le temps selon une période fixe. Il est plus facile de les considérer comme des fenêtres bascule qui peuvent se chevaucher et être émises plus souvent que la taille de la fenêtre. En fait, les fenêtres bascule sont simplement des fenêtres récurrentes dont la valeur hop est égale à celle de size. Quand vous utilisez des fenêtres récurrentes, les événements peuvent faire partie de plusieurs jeux de résultats de fenêtre.

The diagram illustrates a stream with a series of events captured in 60 second hopping windows that occur every 30 seconds.

Pour créer une fenêtre récurrente, vous devez spécifier trois paramètres. Le premier paramètre indique l’unité de temps, comme la seconde, la minute ou l’heure. Le paramètre suivant définit la taille de la fenêtre, qui désigne la durée de vie de chaque fenêtre. Le dernier paramètre obligatoire est la taille de saut, qui spécifie l’avancée dans le temps de chaque fenêtre par rapport à la précédente. Vous pouvez également utiliser un quatrième paramètre facultatif indiquant la taille du décalage.

La requête ci-dessous illustre l’utilisation d’un HoppingWindow()timeunit est défini sur second. windowsize est égal à 60 secondes et hopsize est égal à 30 secondes. Cette requête génère un événement toutes les 30 secondes, contenant la valeur de lecture maximale qui s’est produite au cours des 60 dernières secondes.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)

Glissante

Les fenêtres glissantes génèrent des événements pour des points temporels où le contenu de la fenêtre change réellement. Ce modèle de fonction limite le nombre de fenêtres à prendre en compte. Azure Stream Analytics génère des événements uniquement pour ces points temporels quand un événement est entré ou a quitté la fenêtre. Par conséquent, chaque fenêtre contient au moins un événement. Les événements dans les fenêtres glissantes peuvent appartenir à plusieurs fenêtres glissantes, comme pour les fenêtres récurrentes.

The diagram illustrates a stream with a series of events mapped into sliding windows of 1 minute.

La requête ci-dessous utilise la fonction SlidingWindow() pour rechercher la valeur de lecture maximale dans chaque fenêtre d’une minute dans laquelle un événement s’est produit.

SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)

session

Les fonctions de fenêtre de type Session regroupent les événements qui surviennent au même moment, en filtrant les périodes de temps où il n’existe aucune donnée. Il existe trois paramètres principaux : délai d’expiration, durée maximale et clé de partitionnement (facultative).

The diagram illustrates a stream with a series of events mapped into session windows with a 20-second timeout and a maximum duration of 60 seconds.

L’occurrence du premier événement démarre une fenêtre de session. Supposons qu’un autre événement se produise dans le délai d’expiration spécifié à partir du dernier événement ingéré. Dans ce cas, la fenêtre sera étendue pour incorporer le nouvel événement. Toutefois, si aucun autre événement ne se produit dans le délai d’expiration spécifié, la fenêtre est fermée à la fin de ce délai. Si des événements continuent à se produire durant le délai d’expiration spécifié, la fenêtre de session continuera à s’étendre jusqu’à ce que la durée maximale soit atteinte.

La requête suivante mesure la longueur de la session utilisateur en créant un SessionWindow sur les données de parcours avec un timeoutsize de 20 secondes et un maximumdurationsize de 60 secondes.

SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
       System.TimeStamp() AS WindowEnd,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)

Instantané

Les fenêtres de type Instantané regroupent les événements par valeurs d’horodatage identiques. Contrairement à d’autres types de fenêtrage, une fonction de fenêtre spécifique n’est pas obligatoire. Vous pouvez utiliser une fenêtre d’instantané en spécifiant la fonction System.Timestamp() pour la clause GROUP BY de votre requête.

The diagram illustrates a stream with a series of events mapped into snapshot windows.

Par exemple, la requête suivante recherche la valeur de lecture maximale pour les événements qui se produisent exactement en même temps.

SELECT System.TimeStamp() AS WindowTime,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()

System.Timestamp() est pris en compte dans la clause GROUP BY en tant que définition de fenêtre d’instantané, car il regroupe les événements dans une fenêtre en fonction de l’égalité des horodatages.