Partager via


Fenêtre d’instantané

✅ Azure Stream Analytics ✅ Fabric Eventstream

Les fenêtres d’instantanés regroupent les événements qui ont le même horodatage. Contrairement à d’autres types de fenêtrage, qui nécessitent 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 la façon dont ils sont mappés dans des fenêtres d’instantanés.

Diagramme de 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 d’instantané, car elle regroupe les événements dans une fenêtre en fonction de l’égalité des horodatages. En cas de combinaison 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’elle est utilisée 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 les résultats par lots.

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

Syntaxe

System.Timestamp()

Exemples

Exemple de base

L’exemple suivant retourne le nombre de tweets avec le même type de rubrique qui se produit exactement en même temps :

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

Exemple d’instantané de fenêtre bascule

Une utilisation courante pour les fenêtres d’instantanés consiste à agréger les événements une fois 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. En raison des résultats de la fenêtre bascule, tous ont des horodatages alignés sur la limite de 30 minutes, vous pouvez utiliser une fenêtre d’instantané pour retourner 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 une fois par 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égat Windows().

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