Partager via


Windows (Azure Stream Analytics)

Le fenêtrage permet d’agréger des événements sur différents intervalles de temps en fonction de définitions de fenêtre spécifiques. Vous avez le choix entre quatre types de fenêtres temporelles : Bascule, Hopping, Glissant et Session.

La fonction Windows() étend ce concept pour calculer simultanément les résultats de plusieurs définitions de fenêtre différentes. La fonction Windows() vous permet de spécifier plusieurs définitions de fenêtre. La logique de requête est calculée pour chacune de ces définitions de fenêtre, et le résultat est une union de tous les résultats de fenêtre.

Étant donné que le résultat de la fonction Windows() contient une combinaison de plusieurs fenêtres, vous devez faire la distinction entre les différents résultats. Pour ce faire, affectez une identité à chaque fenêtre accessible à l’aide de la fonction système System.Window(). Id. System.Window() retourne un enregistrement avec l’ID comme champ.

Il existe deux façons de définir Windows :

  • Affectez des identités uniques à l’aide de la fonction Window(),Window ( ID , window_definition ), où ID est une identité de window_definition et est une valeur varchar(max) qui ne respecte pas la casse unique dans la construction Windows.

  • Sans identités, auquel cas System.Window(). L’ID génère une valeur null.

Syntaxe

| Windows ( window_definition, … ) 
| Windows ( Window ( id , window_definition ), … ) 
 
window_definition = 
| HoppingWindow ( … 
| TumblingWindow ( … 
| SlidingWindow ( … 
| SessionWindow ( … 
| Hopping ( … 
| Tumbling ( … 
| Sliding ( … 
| Session ( …  
  

Notes

Les constructions Windows ne peuvent pas être imbriquées. Les identités doivent être attribuées à toutes les définitions de fenêtre ou à aucune.

Il existe des noms de définition de fenêtre raccourcis, comme « Bascule », qui peuvent être utilisés dans Windows() pour éviter la répétition du mot « fenêtre » comme dans Windows(Window('MyWindow', TumblingWindow(…. Les noms raccourcis peuvent également être utilisés en dehors de la construction Windows.

L’utilisation de System.Window() n’est pas une erreur . Id sans la construction Windows, mais sa valeur sera null, car aucune identité n’a été donnée à la fenêtre.

Si des définitions de fenêtre sont spécifiées à l’aide de la fonction Window(), toutes les définitions de fenêtre doivent utiliser la fonction Window() et tous les ID ne respectant pas la casse doivent être uniques. La valeur Null n’est pas autorisée.

Fonction System.Window()

La fonction System.Window() ne peut être utilisée que dans la clause SELECT de l’instruction GROUP BY pour récupérer les métadonnées relatives à la fenêtre de temps de regroupement.

La fonction retourne une valeur de type Record contenant un ID de champ unique, qui contient l’identité de la fenêtre à laquelle appartient l’événement.

Exemples

Créez une fenêtre pour compter les voitures pour chacune des durées 10, 20, 30, 40, 50 et 60 minutes sans identité de fenêtre.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        TumblingWindow(minute, 10), 
        TumblingWindow(minute, 20), 
        TumblingWindow(minute, 30), 
        TumblingWindow(minute, 40), 
        TumblingWindow(minute, 50), 
        TumblingWindow(minute, 60)) 

Créez des fenêtres avec un tronçon de 1 minute et quatre durées différentes : 1 min, 15 min, 30 min et 60 min.

SELECT 
    System.Window().Id, 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        Window('1 min', TumblingWindow(minute, 1)), 
        Window('15 min', HoppingWindow(minute, 15, 1)), 
        Window('30 min', HoppingWindow(minute, 30, 1)), 
        Window('60 min', HoppingWindow(minute, 60, 1))) 

Créez des fenêtres de tailles différentes et filtrez les résultats en fonction de la durée de fenêtre spécifiée dans la table Référence.

WITH HoppingWindowResults AS
( 
    SELECT 
        System.Window().Id, 
        TollId, 
        COUNT(*) 
    FROM Input TIMESTAMP BY EntryTime 
    GROUP BY 
        TollId, 
        Windows( 
            Window('H10', Hopping(minute, 10, 5)), 
            Window('H20', Hopping(minute, 20, 5)), 
            Window('H30', Hopping(minute, 30, 5)), 
            Window('H40', Hopping(minute, 40, 5)), 
            Window('H50', Hopping(minute, 50, 5)), 
            Window('H60', Hopping(minute, 60, 5))) 
) 
 
SELECT HoppingWindowResults.* 
FROM HoppingWindowResults 
JOIN ReferenceTable ON  
    HoppingWindowResults.TollId = ReferenceTable.TollId 
    AND HoppingWindowResults.Id = ReferenceTable.windowId  

Voir aussi