Agrégations

Les exemples de cette rubrique montrent comment effectuer des opérations d'agrégation sur des fenêtres d'événement. Les fonctions d'agrégation prises en charge sont les suivantes :

  • Moyenne sur un champ de charge utile numérique (avg).

  • Somme sur un champ de charge utile (sum).

  • Valeur minimale sur un champ de charge utile (min).

  • Valeur maximale sur un champ de charge utile (max).

  • Nombre d'événements (count).

Les agrégations sont des opérations reposant sur un jeu. Autrement dit, elles effectuent des calculs sur des sous-ensembles de données. Ces sous-ensembles sont spécifiés comme étant des fenêtres d'événement, regroupant des événements dans la chronologie. Selon cette définition, les agrégations peuvent être appliquées uniquement aux fenêtres et non pas aux flux d'événements ordinaires. Elles sont fournies en tant que méthodes d'extension sur CepWindowStream<T>. Pour plus d'informations sur les fenêtres, consultez Utilisation de fenêtres d'événement.

À l'aide de la même syntaxe qu'une opération de projection, les résultats des opérations d'agrégation deviennent des champs de charge utile à valeur scalaire. Les agrégats sur les fenêtres sont calculés de façon incrémentielle. Autrement dit, les résultats de l'agrégation précédente sont mis à jour lorsqu'un événement entre dans la fenêtre d'agrégation ou la quitte. Sachez que cela peut affecter la précision des nombres.

avg, sum, min et max acceptent un paramètre d'entrée, représentant la valeur à agréger. Habituellement, c'est une référence à un champ d'événement. Le paramètre d'entrée est une expression lambda, comme indiqué dans les exemples ci-dessous. L'agrégation count compte les événements complets dans la fenêtre et, par conséquent, n'a pas de paramètre.

La gestion de valeurs Null est cohérente avec les fonctions similaires de Transact-SQL :

  • Dans sum, la valeur Null est traitée comme 0 (zéro).

  • Dans min, toute valeur est inférieure à une valeur Null.

  • Dans max, toute valeur est supérieure à une valeur Null.

  • Dans TopK, lorsque des événements sont classés en fonction d'un champ de charge utile, la valeur Null est toujours inférieure à toute autre valeur.

Les fonctions min et max peuvent être appliquées à tout type qui implémente un comparateur, tel que les types numériques, lexicographiques (string) ou temporels (datetime).

Exemples

Les exemples suivants montrent comment appliquer des fonctions d'agrégation aux événements définis dans Fenêtres récurrentes et Fenêtres d'instantané. Notez que dans cette version finale, les Fenêtres utilisant des nombres ne peuvent pas être utilisées avec les agrégats intégrés ou TopK.

A. Agrégation sur une fenêtre récurrente

Une fenêtre récurrente se répète dans le temps selon une période et une fréquence régulières. Par exemple, l'agrégation des données d'événement dans un laps de temps d'une heure et leur calcul à des intervalles de cinq minutes, produisent une fenêtre récurrente avec une taille de fenêtre d'1 heure et une taille de saut de fenêtre de 5 minutes, comme le montre l'exemple suivant.

// Assuming the following input event type for inputStream:
public class MyPayload 
{ 
    public int i; 
    public float f; 
}
var avgHourly = from win in inputStream.HoppingWindow(TimeSpan.FromHours(1), TimeSpan.FromMinutes(5))
                  select new { hourlyavg = win.Avg(e => e.f) }; 

L'opérateur de la fenêtre est appliqué au flux d'entrée, générant un CepWindowStream<T>. Chaque élément win dans ce flux de données représente une fenêtre qui contient des événements.

L'exemple suivant compte les événements dans chaque heure complète. Il utilise une fenêtre bascule. Il s'agit d'un raccourci pour une fenêtre récurrente dont la taille du saut est égale à la taille de la fenêtre.

var countHourly = from win in hourStream.TumblingWindow(TimeSpan.FromHours(1))
                  select new { count = win.Count() };

B. Agrégation sur une fenêtre d'instantané

Dans l'exemple suivant, la clause from applique une fenêtre d'instantané sur le flux de données inputStream. Dans l'exemple, les résultats de l'agrégation Sum sont affectés au champ de charge utile e.i et les résultats de l'agrégation Avg sont calculés en fonction du champ de charge utile e.f. En outre, l'agrégat de nombre est utilisé. L'exemple indique également comment combiner plusieurs agrégations dans la même instruction. Elles sont toutes calculées par rapport à la même fenêtre.

// Assuming the following input event type for inputStream:
public class MyPayload 
{ 
    public int i; 
    public float f; 
}

// Multiple aggregations over a snapshot window
var snapshotAgg = from w in inputStream.Snapshot()
                  select new { sum = w.Sum(e => e.i),
                               avg = w.Avg(e => e.f),
                               count = w.Count() };

Vous pouvez incorporer les agrégats dans des expressions complexes, et chaque expression peut contenir plusieurs agrégats, comme l'illustre l'exemple suivant.

var result = from w in inputStream.Snapshot()
             select new { ratio = w.Sum(e => e.i) / w.Sum(e => e.f) };

Voir aussi

Concepts

Modifications d'horodatage

Utilisation de fenêtres d'événement

Fenêtres récurrentes

Fenêtres utilisant des nombres

Fenêtres d'instantané