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.
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.
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.
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.
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).
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.
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 :