Ventana Sesión (Azure Stream Analytics)
Eventos de grupo de ventanas de sesión que llegan a momentos similares, filtrando períodos de tiempo en los que no hay datos. La función de ventana de sesión tiene tres parámetros principales: tiempo de espera, duración máxima y clave de partición (opcional).
En el diagrama siguiente se muestra una secuencia con una serie de eventos y cómo se asignan a las ventanas de sesión de 5 minutos de espera y la duración máxima de 10 minutos.
Una ventana de sesión se inicia cuando se produce el primer evento. Si se produce otro evento en el tiempo de espera especificado desde el último evento ingerido, la ventana se amplía para incluir el nuevo evento. En caso contrario, si no se produce ningún evento en el tiempo de espera, se cierra la ventana en el tiempo de espera.
Si se siguen produciendo eventos en el tiempo de espera especificado, la ventana de sesión se sigue ampliando hasta que se alcanza la duración máxima. Tenga en cuenta que los intervalos de comprobación de duración máxima se establecen para tener el mismo tamaño que la duración máxima especificada. Por ejemplo, si la duración máxima es de 10, comprueba si la ventana supera la duración máxima se producirá en t = 0, 10, 20, 30, etc. Esto significa que la duración real de una ventana de sesión podría ser hasta dos veces maxDuration.
Por lo tanto, matemáticamente, la ventana de sesión finaliza si se cumple la siguiente condición:
Cuando se proporciona una clave de partición, los eventos se agrupan por clave, y la ventana de sesión se aplica independientemente a cada grupo. Esto es útil para los casos en los que necesita ventanas de sesión diferentes para distintos usuarios o dispositivos.
Sintaxis
{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
Nota:
La ventana sesión se puede usar de las dos maneras anteriores.
Argumentos
timeunit Es la unidad de tiempo para el tamaño de ventanas. En la tabla siguiente se enumeran todos los argumentos timeunit válidos.
Timeunit | Abreviaturas |
---|---|
day | dd, d |
hora | hh |
minute | mi, n |
second | ss, s |
milisegundo | ms |
microsegundo | mcs |
timeoutsize
Entero grande que describe el tamaño de brecha de la ventana de sesión. Los datos que se producen dentro del tamaño de brecha se agrupan en la misma ventana.
maxdurationsize
Si el tamaño total de la ventana supera el valor maxDurationSize especificado en un punto de comprobación, la ventana se cierra y se abre una nueva ventana en el mismo punto. Actualmente, el tamaño del intervalo de comprobación es igual a maxDurationSize.
partitionkey
Parámetro opcional que especifica la clave en la que opera la ventana de sesión. Si se especifica, la ventana solo agrupará los eventos de la misma clave.
Ejemplos
Supongamos que tiene los siguientes datos json:
[
// 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"
},
// ...
]
Para medir cuánto tiempo son cada sesión de usuario, puede usar la consulta siguiente:
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 consulta anterior crea una ventana de sesión con un tiempo de espera de 2 minutos, una duración máxima de 60 minutos y una clave de partición de user_id. Esto significa que se crearán ventanas de sesión independientes para cada user_id. Para cada ventana, esta consulta generará la salida que contiene el user_id, la hora de inicio de la ventana (window_start), el final de la ventana (window_end) y la duración total de la sesión del usuario (duration_in_seconds).