Entender as funções de janela
Uma meta comum do processamento de fluxo é agregar eventos em intervalos temporais, ou janelas. Por exemplo, para contar o número de postagens em mídia social por minuto ou para calcular a chuva média por hora.
O Azure Stream Analytics inclui suporte nativo para cinco tipos de funções de janela temporais. Essas funções permitem definir intervalos temporais nos quais os dados são agregados em uma consulta. As funções de janela com suporte são Em cascata, Salto, Deslizante, Sessão e Instantâneo.
Em cascata
As funções de janela Em cascata segmentam um fluxo de dados em uma série contígua de segmentos de tempo fixos e sem sobreposição e operam com relação a eles. Os eventos não podem pertencer a mais de uma janela em cascata.
O exemplo Janela em cascata, representado pela consulta a seguir, localiza o valor máximo de leitura em cada janela de um minuto. As funções de janela são aplicadas em trabalhos do Stream Analytics usando a cláusula GROUP BY da sintaxe de consulta. A cláusula GROUP BY
na consulta a seguir contém a função TumblingWindow()
, que especifica um tamanho de janela de um minuto.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)
Saltos
As funções de janela de Salto modelam janelas sobrepostas agendadas, saltando para frente no tempo por um período fixo. É mais fácil considerá-las como Janelas em cascata que podem se sobrepor e ser emitidas com mais frequência do que o tamanho da janela. Na verdade, as janelas em cascata são simplesmente uma janela de salto cujo hop
é igual ao size
. Ao usar Janelas de salto, os eventos podem pertencer a mais de um conjunto de resultados da janela.
Para criar uma janela de salto, você deve especificar três parâmetros. O primeiro parâmetro indica a unidade de tempo, como segundo, minuto ou hora. O parâmetro a seguir define o tamanho da janela, que designa quanto tempo cada janela dura. O parâmetro final necessário é o tamanho do salto, que especifica o quanto cada janela avança em relação à anterior. Um quarto parâmetro opcional que indica o tamanho do deslocamento também pode ser usado.
A consulta a seguir demonstra como usar uma HoppingWindow()
em que a timeunit
está definida como second
. O windowsize
é de 60 segundos, e o hopsize
é de 30 segundos. Essa consulta gera um evento a cada 30 segundos que contém o valor de leitura máximo que ocorreram nos últimos 60 segundos.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)
Deslizante
As janelas deslizantes geram eventos para pontos no tempo em que o conteúdo da janela é realmente alterado. Esse modelo de função limita o número de janelas que precisam ser consideradas. O Azure Stream Analytics gera eventos somente para os pontos no tempo em que um evento entrou ou saiu da janela. Dessa forma, cada janela contém pelo menos um evento. Os eventos nas janelas deslizantes podem pertencer a mais de uma janela deslizante, semelhante a janelas de salto.
A consulta a seguir usa a função SlidingWindow()
para localizar o valor máximo de leitura em cada janela de um minuto em que ocorreu um evento.
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)
Session
As funções de janela de sessão agrupam os eventos que chegam em momentos semelhantes, filtrando períodos em que não há nenhum dado. Elas têm três parâmetros principais: tempo limite, duração máxima e chave de particionamento (opcional).
A ocorrência do primeiro evento inicia uma janela de sessão. Suponha que outro evento ocorra dentro do tempo limite especificado do último evento ingerido. Nesse caso, a janela será estendida para incorporar o novo evento. No entanto, se nenhum outro evento ocorrer dentro do tempo limite especificado, a janela será fechada no tempo limite. Se eventos continuarem dentro do tempo limite especificado, a janela de sessão será estendida até atingir a duração máxima.
A consulta a seguir mede o comprimento da sessão de usuário criando um SessionWindow
com base nos dados de sequência de cliques com um timeoutsize
de 20 segundos e um maximumdurationsize
de 60 segundos.
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)
Instantâneo
Instantâneos agrupam eventos em valores de carimbo de data/hora idênticos. Ao contrário de outros tipos de janela, uma função de janela específica não é necessária. Você pode empregar uma janela de instantâneo especificando a função System.Timestamp()
à cláusula da consulta GROUP BY
.
Por exemplo, a consulta a seguir localiza o valor máximo de leitura para eventos que ocorrem precisamente ao mesmo tempo.
SELECT System.TimeStamp() AS WindowTime,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()
System.Timestamp()
é considerado na cláusula GROUP BY
como uma definição de janela de instantâneo porque agrupa eventos em uma janela com base na igualdade de carimbos de data/hora.