Partager via


Fenêtres utilisant des nombres

Une fenêtre utilisant des nombres définit un sous-ensemble d'événements se produisant durant une période donnée et sur lesquels vous pouvez effectuer un calcul basé sur un ensemble (agrégation, par exemple). Les fenêtres utilisant des nombres, comme les fenêtres d'instantané, n'ont pas de taille de fenêtre fixe. Elles sont définies par le nombre d'événements qu'elles contiennent. Plusieurs scénarios différents peuvent ainsi être envisagés en vue d'appliquer une opération reposant sur un ensemble à un nombre donné d'événements dans un flux de données dont la fréquence d'événement varie.

ConseilConseil

Dans cette version de StreamInsight, les fenêtres utilisant des nombres peuvent uniquement être utilisées avec les agrégats ou les opérateurs définis par l'utilisateur, mais pas avec les agrégats intégrés ni les opérateurs TopK.

Pour obtenir une description générale des fenêtres d'événement et en savoir plus sur leur mode d'implémentation et d'utilisation dans StreamInsight, consultez Utilisation de fenêtres d'événement.

Fonctionnement des fenêtres utilisant des nombres

La taille variable des fenêtres utilisant des nombres est déterminée par le nombre d'heures de début des événements distincts dans une chronologie. Le jeu de fenêtres avec un nombre N est défini comme tous les intervalles de temps qui contiennent N heures de début d'événement consécutives, où N est au moins égal à 1. Plus précisément, chaque intervalle de temps se termine à l'heure de début, plus un cycle de l'énième événement distinct. Les fenêtres utilisant des nombres se déplacent dans la chronologie avec chaque heure de début des événements distincts. Par conséquent, chaque nouvel événement qui définit une nouvelle heure de début d'événement provoque la création d'une nouvelle fenêtre utilisant des nombres, jusqu'à ce que le nombre soit atteint. Autrement dit, tant que le nombre d'heures de début des événements distincts est plus petit que N, aucune nouvelle fenêtre ne sera créée. Comme pour les fenêtres récurrentes, le décalage entre les fenêtres utilisant des nombres correspond à la « taille de saut de la fenêtre » ; toutefois, à la différence d'une fenêtre récurrente, la taille de saut des fenêtres utilisant des nombres n'est généralement pas constante.

Si chaque événement de la chronologie a un horodateur unique, le nombre d'événements d'une fenêtre de ce type est égal à N. Si plusieurs événements ont la même heure de début d'événement, le nombre d'événements contenus sera supérieur à N. Il est important de comprendre ce comportement lors de l'application d'une agrégation à la fenêtre.

L'illustration suivante montre un flux contenant trois événements : e1, e2 et e3. Les barres verticales affichent les limites de la fenêtre utilisant des nombres définies par ces événements. Les flux d'événements en bleu clair représentent les flux d'événements qui se déplacent dans le temps. Les zones orange affichent les fenêtres utilisant des nombres et les événements contenus dans chacune d'elles. Les deux premières heures de début des événements distincts appartiennent à e1 et e2. La première fenêtre utilisant des nombres couvre la période correspondante, en démarrant à l'heure de début d'e1 et en se terminant à l'heure de début d'e2 plus un cycle. La deuxième fenêtre contient les heures de début d'e2 et e3 :

Fenêtre de comptage d'événements.

Notez que les événements présentés dans cette illustration ont déjà été limités en vertu de la stratégie d'entrée de la fenêtre. La stratégie d'entrée, comme pour toutes les fenêtres StreamInsight, a pour fonction de faire coïncider les événements à la taille de la fenêtre. Un agrégat ou un opérateur basé sur le temps s'appliquera non plus aux durées de vie d'origine, mais aux durées de vie d'événement limitées dans les fenêtres.

L'illustration suivante montre des fenêtres utilisant des nombres contenant des événements point qui sont valides uniquement pour un instant unique. Cela contribue à démontrer que la méthode CountByStartTimeWindow() compte les heures de début des événements distincts au lieu des événements eux-mêmes. L'illustration montre un flux d'événements point. Les barres verticales représentent les heures de début de la fenêtre utilisant des nombres, définies par les événements point. Les flux d'événements en bleu clair représentent les flux d'événements qui se déplacent dans le temps. Notez que deux événements sont colocalisés à la même heure. Les zones en orange affichent les fenêtres utilisant des nombres et les événements contenus dans chacune d'elles. Les deux événements colocalisés comptent pour une unité en ce qui concerne le paramètre de fenêtre N.

Fenêtre de comptage.

Dans le cas d'événements point, le comportement de la fenêtre consistant à ajouter un cycle à l'heure de début de l'énième événement lors de la définition de l'heure de fin de la fenêtre, provoque l'incorporation complète de tous ses événements par la fenêtre.

Définition d'une fenêtre utilisant des nombres

Une fenêtre utilisant des nombres est définie par le nombre d'heures de début des événements distincts dans la chronologie. Une fenêtre utilisant des nombres est spécifiée dans une requête LINQ (Language Integrated Query) comme illustré dans l'exemple suivant. Les stratégies d'entrée et de sortie sont toujours les mêmes : ClipToWindow et PointAlignToWindowEnd, respectivement.

var agg = from w in inputStream.CountByStartTimeWindow(10)
          select new { sum = w.MySum(e => e.i) };

Étant donné que les fenêtres utilisant des nombres ne peuvent pas être utilisées actuellement avec les agrégats intégrés, l'exemple ci-dessus suppose que vous utilisez un agrégat MySum défini par l'utilisateur.

Comme pour toute autre fenêtre, cette stratégie de sortie de fenêtre est appliquée au résultat de l'opération reposant sur un ensemble. La seule stratégie de sortie disponible pour les fenêtres utilisant des nombres consiste à générer un événement point à la fin de la fenêtre. L'horodateur du point coïncide avec l'heure de début du dernier événement dans la fenêtre. En d'autres termes, l'événement point reste dans l'intervalle de la fenêtre. Après application d'une agrégation de l'entrée du diagramme ci-dessus, le flux de sortie se présente de la façon suivante :

Fenêtre de comptage avec résultats d'agrégation.

Dans le cas d'un opérateur défini par l'utilisateur basé sur le temps, susceptible de générer des événements de résultat (et notamment des horodateurs), les horodateurs sont remplacés par la stratégie de sortie. Chaque événement que l'opérateur défini par l'utilisateur retourne est transformé en événement point à la fin de la fenêtre de telle sorte que le point est aligné avec l'heure de début du dernier événement dans la fenêtre, tout comme l'événement de résultat unique d'une agrégation affiché dans le diagramme précédent.

Voir aussi

Concepts

Agrégations

TopK

Agrégats et opérateurs définis par l'utilisateur

Fenêtres récurrentes

Fenêtres d'instantané