Présentation des fonctions de fenêtrage de Stream Analytics

Dans les scénarios de streaming en temps réel, il est courant d’effectuer des opérations sur les données contenues dans des fenêtres temporelles. Stream Analytics a une prise en charge native des fonctions de fenêtrage, permettant aux développeurs de créer des travaux de traitement de flux complexes avec un minimum d’effort.

Cinq types de fenêtres temporelles sont disponibles :

Vous utilisez les fonctions de fenêtre dans la clause GROUP BY de la syntaxe de requête dans vos travaux Stream Analytics. Vous pouvez également agréger des événements sur plusieurs fenêtres avec la fonction Windows().

Toutes les opérations de fenêtrage renvoient les résultats à la fin de la fenêtre. Lorsque vous démarrez une tâche Stream Analytics, vous pouvez spécifier l’heure de début de la sortie de la tâche et le système extrait automatiquement les événements précédents dans les flux entrants pour générer la première fenêtre à l’heure spécifiée : par exemple, lorsque vous démarrez avec l’option Maintenant, elle commence immédiatement à émettre des données. La sortie de la fenêtre sera un événement unique qui dépendra de la fonction d’agrégation utilisée. L’événement de sortie a l’horodatage de la fin de la fenêtre et toutes les fonctions de fenêtrage sont définies avec une longueur fixe.

Diagram that shows the concept of Stream Analytics window functions.

Fenêtre bascule

Utilisez des fonctions de Fenêtre bascule pour segmenter un flux de données en segments de temps distincts et appliquer une fonction à ces segments.

Les différenciations clés d’une fenêtre bascule sont les suivantes :

  • Ils ne se répètent pas.
  • Ils ne se chevauchent pas.
  • Un événement ne peut pas appartenir à plus d’une fenêtre bascule.

Diagram that shows an example Stream Analytics tumbling window.

Voici les données d’entrée de l’exemple :

Marqueur CreatedAt TimeZone
1 2021-10-26T10:15:01 PST
5 2021-10-26T10:15:03 PST
4 2021-10-26T10:15:06 PST
... ... ...

Voici l’exemple de requête :

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

Voici l'exemple de sortie :

WindowEndTime TimeZone Count
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 PST 2
2021-10-26T10:15:30 PST 4

Fenêtre récurrente

Les fonctions de fenêtre récurrente font des bonds d’une durée fixe dans le temps. Il peut être 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. Les événements peuvent appartenir à plusieurs jeux de résultats de fenêtres récurrentes. Pour créer une fenêtre récurrente identique à une fenêtre bascule, spécifiez une taille de bond égale à la taille de la fenêtre.

Diagram that shows an example of the hopping window.

Voici les exemples de données :

Marqueur CreatedAt Rubrique
1 2021-10-26T10:15:01 Diffusion en continu
5 2021-10-26T10:15:03 Diffusion en continu
4 2021-10-26T10:15:06 Diffusion en continu
... ... ...

Voici l’exemple de requête :

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

Voici l'exemple de sortie :

WindowEndTime Rubrique Count
2021-10-26T10:15:10 Diffusion en continu 5
2021-10-26T10:15:15 Diffusion en continu 3
2021-10-26T10:15:20 Diffusion en continu 2
2021-10-26T10:15:25 Diffusion en continu 4
2021-10-26T10:15:30 Diffusion en continu 4

Fenêtre glissante

Les fenêtres glissantes, à la différence des fenêtres bascules ou récurrentes, génèrent des événements uniquement pour les points temporels où le contenu de la fenêtre change réellement. En d’autres termes, lorsqu’un événement entre dans la fenêtre ou la quitte. Par conséquent, chaque fenêtre affiche au moins un événement. Comme pour les fenêtres récurrentes, les événements peuvent appartenir à plusieurs fenêtres glissantes.

Diagram that shows an example of a sliding window.

Voici les exemples de données d’entrée :

Marqueur CreatedAt Rubrique
1 2021-10-26T10:15:10 Diffusion en continu
5 2021-10-26T10:15:12 Diffusion en continu
9 2021-10-26T10:15:15 Diffusion en continu
7 2021-10-26T10:15:15 Diffusion en continu
8 2021-10-26T10:15:27 Diffusion en continu

Voici l’exemple de requête :

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

Sortie :

WindowEndTime Rubrique Count
2021-10-26T10:15:15 Diffusion en continu 4
2021-10-26T10:15:20 Diffusion en continu 3

Fenêtre session

Les fonctions de fenêtre session regroupent les événements qui arrivent au même moment, en filtrant les périodes de temps où il n’existe aucune donnée. Il a trois paramètres principaux :

  • Délai d'expiration
  • Durée maximale
  • Clé de partitionnement (facultatif).

Diagram that shows a sample Stream Analytics session window.

Une fenêtre de session commence lorsque le premier événement se produit. Si un autre événement se produit dans le délai d’expiration spécifié à partir du dernier événement réceptionné, alors la fenêtre s’étend pour inclure le nouvel événement. Dans le cas contraire, si aucun événement ne se produit dans le délai imparti, la fenêtre est fermée une fois le délai expiré.

Si des événements continuent à se produire durant le délai d’expiration spécifié, la fenêtre de session continue à s’étendre jusqu'à ce que la durée maximale soit atteinte. Les intervalles de vérification de la durée maximale sont définis pour être de la même taille que la durée maximale spécifiée. Par exemple, si la durée maximale est égale à 10, alors les vérifications pour voir si la fenêtre dépasse la durée maximale se produisent à t = 0, 10, 20, 30, etc.

Lorsqu’une clé de partition est fournie, les événements sont regroupés par la clé et la fenêtre de session est appliquée indépendamment à chaque groupe. Ce partitionnement est utile lorsque vous avez besoin de fenêtres de session différentes pour différents utilisateurs ou appareils.

Voici les exemples de données d’entrée :

Marqueur CreatedAt Rubrique
1 2021-10-26T10:15:01 Diffusion en continu
2 2021-10-26T10:15:04 Diffusion en continu
3 2021-10-26T10:15:13 Diffusion en continu
... ... ...

Voici l’exemple de requête :

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

Sortie :

WindowEndTime Rubrique Count
2021-10-26T10:15:09 Diffusion en continu 2
2021-10-26T10:15:24 Diffusion en continu 4
2021-10-26T10:15:31 Diffusion en continu 2
2021-10-26T10:15:39 Diffusion en continu 1

Fenêtre d’instantané

Les fenêtres d’instantanés regroupent les événements qui ont le même horodatage. Contrairement à d’autres types de fenêtrage, qui requièrent une fonction de fenêtre spécifique (par exemple, SessionWindow()), vous pouvez appliquer une fenêtre d’instantané en ajoutant System.Timestamp() à la clause GROUP BY.

Diagram that shows a sample Steam Analytics snapshot window.

Voici les exemples de données d’entrée :

Marqueur CreatedAt Rubrique
1 2021-10-26T10:15:04 Diffusion en continu
2 2021-10-26T10:15:04 Diffusion en continu
3 2021-10-26T10:15:04 Diffusion en continu
... ... ...

Voici l’exemple de requête :

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

Voici l'exemple de sortie :

WindowEndTime Rubrique Count
2021-10-26T10:15:04 Diffusion en continu 4
2021-10-26T10:15:10 Diffusion en continu 2
2021-10-26T10:15:13 Diffusion en continu 1
2021-10-26T10:15:22 Diffusion en continu 2

Étapes suivantes

Voir les articles suivants :