Fenêtre Instantané (Azure Stream Analytics)

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.

Le diagramme suivant illustre un flux avec une série d’événements et comment ils sont mappés à instantané fenêtres.

Diagramme d’une fenêtre d’instantané

System.Timestamp() peut être considéré dans la clause GROUP BY comme une colonne clé ou une définition de fenêtre instantané, car il regroupe les événements dans une fenêtre en fonction de l’égalité des horodatages. Lorsqu’il est combiné avec une autre fonction de fenêtre, System.Timestamp() est traité comme une clé et non comme une définition de fenêtre. System.Timestamp() ne génère pas d’erreur lorsqu’il est utilisé avec d’autres fonctions de fenêtre, contrairement à l’utilisation de plusieurs fonctions de fenêtre dans la clause GROUP BY. L’utilisation de System.Timestamp() et d’une fonction de fenêtre dans GROUP BY peut être utile pour traiter par lot les résultats.

Toute expression qui contient System.Timestamp() n’est pas considérée comme une fenêtre. Par exemple, GROUP BY DATEPART(minute, System.Timestamp()) échoue avec l’erreur « une fenêtre doit être spécifiée ».

Syntaxe

System.Timestamp()

Exemples

Exemple de base

L’exemple suivant retourne le nombre de tweets avec le même type de rubrique qui se produisent exactement au même moment :

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

Exemple de fenêtre bascule instantané

Une utilisation courante pour instantané fenêtres consiste à agréger des événements après qu’ils ont été regroupés sur un horodatage unique via une fonction de fenêtre précédente, comme TumblingWindow ci-dessous.

L’exemple suivant retourne le nombre de tweets avec le même type de rubrique par le même utilisateur dans les intervalles de 30 minutes :

WITH PerInterval AS (
    SELECT Topic, User, COUNT(*)
    FROM TwitterStream TIMESTAMP BY CreatedAt
    GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval

Pour trouver le nombre d’utilisateurs et le nombre total de tweets par rubrique dans le même intervalle, vous pouvez utiliser le résultat de la requête précédente. Étant donné que les résultats de la fenêtre bascule auront tous des horodatages alignés sur la limite de 30 minutes, vous pouvez utiliser une fenêtre instantané pour renvoyer des événements à chaque limite, car ils ont tous la même valeur d’horodatage.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()

La requête précédente a retourné le nombre d’utilisateurs et le nombre total de tweets par rubrique dans le même intervalle de 30 minutes. Pour obtenir les mêmes résultats toutes les 2 heures, ajoutez une fenêtre bascule de 2 heures à la clause GROUP BY.

La requête suivante retourne les résultats des quatre intervalles de 30 minutes à la fin de chaque fenêtre de 2 heures.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)

Exemple de fenêtres d’agrégation

Vous pouvez utiliser System.Timestamp() comme l’une des fenêtres de la construction d’agrégation Windows().

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows(
        TumblingWindow(minute, 10),
        TumblingWindow(minute, 20),
        System.Timestamp())