Compartilhar via


Janela sessão (Azure Stream Analytics)

Eventos de grupo de janelas de sessão que chegam em momentos 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 de main: 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 para janelas de sessão de 5 minutos de tempo limite e duração máxima de 10 minutos.

Janela de sessão do Stream Analytics

Uma janela de sessão começa quando o primeiro evento ocorre. Se outro evento ocorrer dentro do tempo limite especificado a partir do último evento ingerido, a janela se estende para incluir o novo evento. Caso contrário, se não ocorrer nenhum evento dentro do tempo limite, a janela será fechada conforme o tempo limite.

Se eventos continuarem dentro do tempo limite especificado, a janela de sessão continuará se estendendo até que a duração máxima seja atingida. Observe que os intervalos máximos de verificação de duração são definidos como do mesmo tamanho que a duração máxima especificada. Por exemplo, se a duração máxima for 10, a verificação será se a janela exceder a duração máxima ocorrerá em t = 0, 10, 20, 30 etc. Isso significa que a duração real de uma janela de sessão pode ser até duas vezes maxDuration.

Portanto, matematicamente, nossa janela de sessão terminará se a seguinte condição for atendida:

Janela de sessão terminando condições Janela

Quando uma chave de partição é fornecida, os eventos são agrupados pela chave e a janela de sessão é aplicada a cada grupo de forma independente. Isso é útil para casos em que você precisa de janelas de sessão diferentes para diferentes usuários ou dispositivos.

Syntax

{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

timeunit É a unidade de tempo para o windowsize. A tabela a seguir lista todos os argumentos timeunit válidos.

Timeunit Abreviações
dia dd, d
hour hh
minute mi, n
second ss, s
milissegundo ms
microssegundo mcs

timeoutsize

Um inteiro grande que descreve o tamanho da lacuna da janela de 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.

Partitionkey

Um parâmetro opcional que especifica a chave sobre a qual a janela de sessão opera. Se especificada, a janela agrupará apenas 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 por quanto tempo 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 janelas de sessão independentes serão criadas para cada user_id. Para cada janela, essa consulta gerará a saída que contém o user_id, a hora de início da janela (window_start), o final da janela (window_end) e a duração total da sessão do usuário (duration_in_seconds).