Fenêtre session (Azure Stream Analytics)

Les fenêtres de session regroupent les événements qui arrivent à des heures similaires, en filtrant les périodes où il n’y a pas de données. La fonction de fenêtre de session a trois paramètres main : délai d’expiration, durée maximale et clé de partitionnement (facultatif).

Le diagramme suivant illustre un flux avec une série d’événements et la façon dont ils sont mappés aux fenêtres de session avec un délai d’expiration de 5 minutes et une durée maximale de 10 minutes.

Fenêtre session Stream Analytics

Une fenêtre de session commence lorsque le premier événement se produit. Si un autre événement se produit dans le délai d’expiration spécifié à partir du dernier événement réceptionné, alors la fenêtre s’étend pour inclure le nouvel événement. Dans le cas contraire, si aucun événement ne se produit dans le délai imparti, la fenêtre est fermée une fois le délai expiré.

Si des événements continuent à se produire durant le délai d’expiration spécifié, la fenêtre de session continuera à s’étendre jusqu'à ce que la durée maximale soit atteinte. Notez que les intervalles de vérification de la durée maximale sont définis pour être de la même taille que la durée maximale spécifiée. Par exemple, si la durée maximale est de 10, les vérifications sur si la fenêtre dépasse la durée maximale se produisent à t = 0, 10, 20, 30, etc. Cela signifie que la durée réelle d’une fenêtre de session peut alors être jusqu’à deux fois maxDuration.

Ainsi, mathématiquement, notre fenêtre de session se termine si la condition suivante est remplie :

Conditions de fin de la fenêtre de

Lorsqu’une clé de partition est fournie, les événements sont regroupés par la clé et la fenêtre de session est appliquée indépendamment à chaque groupe. Cela est utile dans les cas où vous avez besoin de différentes fenêtres de session pour différents utilisateurs ou appareils.

Syntaxe

{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]

{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]

Notes

La fenêtre Session peut être utilisée de deux manières ci-dessus.

Arguments

timeunit Unité de temps pour la taille windows. Le tableau suivant répertorie tous les arguments de timeunit valides.

Timeunit Abréviations
day dd, d
hour hh
minute mi, n
second ss, s
milliseconde ms
microseconde mcs

timeoutsize

Entier volumineux qui décrit la taille d’intervalle de la fenêtre de session. Les données qui se produisent dans la taille de l’écart sont regroupées dans la même fenêtre.

maxdurationsize

Si la taille totale de la fenêtre dépasse la valeur maxDurationSize spécifiée à un point de vérification, la fenêtre est fermée et une nouvelle fenêtre est ouverte au même point. Actuellement, la taille de l’intervalle de vérification est égale à maxDurationSize.

partitionkey

Paramètre facultatif qui spécifie la clé sur laquelle la fenêtre de session opère. Si elle est spécifiée, la fenêtre regroupera uniquement les événements de la même clé.

Exemples

Supposons que vous disposez des données json suivantes :

[
  // time: the timestamp when the user clicks on the link
  // user_id: the id of the user
  // url: the url the user clicked on
  {
    "time": "2017-01-26T00:00:00.0000000z",
    "user_id": 0,
    "url": "www.example.com/a.html"
  },
  {
    "time": "2017-01-26T00:00:20.0000000z",
    "user_id": 0,
    "url": "www.example.com/b.html"
  },
  {
    "time": "2017-01-26T00:00:55.0000000z",
    "user_id": 1,
    "url": "www.example.com/c.html"
  },
  // ...
]

Pour mesurer la durée de chaque session utilisateur, vous pouvez utiliser la requête suivante :

CREATE TABLE localinput(time DATETIME, user_id BIGINT, url NVARCHAR(MAX))
SELECT
    user_id,
    MIN(time) AS window_start,
    System.Timestamp() AS window_end,
    DATEDIFF(s, MIN(time), System.Timestamp()) AS duration_in_seconds
FROM localinput TIMESTAMP BY time
GROUP BY user_id, SessionWindow(minute, 2, 60) OVER (PARTITION BY user_id)

La requête précédente crée une fenêtre de session avec un délai d’expiration de 2 minutes, une durée maximale de 60 minutes et une clé de partitionnement de user_id. Cela signifie que des fenêtres de session indépendantes seront créées pour chaque user_id. Pour chaque fenêtre, cette requête génère une sortie qui contient le user_id, l’heure de début de la fenêtre (window_start), la fin de la fenêtre (window_end) et la durée totale de la session utilisateur (duration_in_seconds).