Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
✅ Azure Stream Analytics ✅ Fabric Eventstream
As janelas de sessão agrupam eventos que chegam em horários semelhantes, filtrando períodos de tempo em que não há dados. A função de janela de sessão tem três parâmetros principais: tempo limite, duração máxima e chave de particionamento (opcional).
O diagrama a seguir ilustra um fluxo com uma série de eventos e como eles são mapeados em janelas de sessão de tempo limite de 5 minutos e duração máxima de 10 minutos.
Uma janela de sessão começa quando ocorre o primeiro evento. Se outro evento ocorrer dentro do tempo limite especificado do último evento ingerido, a janela se estenderá para incluir o novo evento. Caso contrário, se nenhum evento ocorrer dentro do tempo limite, a janela será fechada no tempo limite.
Se os eventos continuarem ocorrendo dentro do tempo limite especificado, a janela da sessão continuará se estendendo até que a duração máxima seja atingida. Tenha em atenção que os intervalos máximos de verificação da duração estão definidos para serem do mesmo tamanho que a duração máxima especificada. Por exemplo, se a duração máxima for 10, então as verificações se a janela exceder a duração máxima acontecerão em t = 0, 10, 20, 30, etc. Isso significa que a duração real de uma janela de sessão pode ser de até duas vezes maxDuration.
Assim, matematicamente, nossa janela de sessão termina se a seguinte condição for satisfeita:
Quando uma chave de partição é fornecida, os eventos são agrupados pela chave e a janela de sessão é aplicada a cada grupo independentemente. Isso é útil para casos em que você precisa de janelas de sessão diferentes para diferentes usuários ou dispositivos.
Sintaxe
{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
Observação
A janela de sessão pode ser usada das duas maneiras acima.
Argumentos
unidade de tempo É a unidade de tempo para o tamanho da janela. A tabela a seguir lista todos os argumentos de unidade de tempo válidos.
| Unidade de tempo | Abreviações |
|---|---|
| Dia | DD, D |
| hora | HH |
| minuto | mi, n |
| segundo | SS, S |
| milissegundos | em |
| microssegundos | MCS |
timeoutsize
Um grande número inteiro que descreve o tamanho da lacuna da janela da sessão. Os dados que ocorrem dentro do tamanho da lacuna são agrupados na mesma janela.
maxdurationsize
Se o tamanho total da janela exceder o maxDurationSize especificado em um ponto de verificação, a janela será fechada e uma nova janela será aberta no mesmo ponto. Atualmente, o tamanho do intervalo de verificação é igual a maxDurationSize.
chave de partição
Um parâmetro opcional que especifica a chave sobre a qual a janela de sessão opera. Se especificado, a janela só agrupará eventos da mesma chave.
Exemplos
Suponha que você tenha os seguintes dados 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 a duração de cada sessão de usuário, você pode usar a seguinte consulta:
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)
A consulta anterior cria uma janela de sessão com um tempo limite de 2 minutos, uma duração máxima de 60 minutos e chave de particionamento de user_id. Isso significa que serão criadas janelas de sessão independentes para cada user_id. Para cada janela, esta consulta irá gerar uma saída que contém o user_id, a hora de início da janela (window_start), o fim da janela (window_end) e a duração total da sessão do utilizador (duration_in_seconds).