Compreender as funções da janela
Um objetivo comum do processamento de fluxo é agregar eventos em intervalos temporais, ou janelas . Por exemplo, para contar o número de publicações nas redes sociais por minuto ou para calcular a precipitação média por hora.
O Azure Stream Analytics inclui suporte nativo para cinco tipos de funções de janela temporal. Essas funções permitem definir intervalos temporais nos quais os dados são agregados em uma consulta. As funções de janela suportadas são Tumbling, Hopping, Sliding, Sessione Snapshot.
Tombamento
As funções de janela de Tumbling segmentam um fluxo de dados em uma série contígua de segmentos de tempo de tamanho fixo e não sobrepostos, e aplicam-se a eles. Os eventos não podem pertencer a mais de uma janela deslizante.
O exemplo de janela deslizante, representado pela consulta a seguir, encontra o valor máximo de leitura em cada intervalo 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)
Salto
As funções de janela deslizante modelam janelas sobrepostas programadas, avançando no tempo por um período fixo. É mais fácil pensar neles como janelas deslizantes que podem se sobrepor e ser emitidas com uma frequência superior ao tamanho da própria janela. Na verdade, as janelas de tombo são simplesmente uma janela saltitante cuja hop
é igual à sua size
. Quando usa janelas deslizantes, os eventos podem pertencer a mais de um conjunto de resultados de 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. Pode também ser utilizado um quarto parâmetro opcional que indique o tamanho do deslocamento.
A consulta a seguir demonstra o uso de um HoppingWindow()
em que o timeunit
está definido como second
. A windowsize
é de 60 segundos e a hopsize
é de 30 segundos. Esta consulta gera um evento a cada 30 segundos contendo o valor máximo de leitura que ocorreu 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)
Deslizamento
Janelas deslizantes geram eventos para pontos no tempo em que o conteúdo da janela realmente muda. Este modelo de função limita o número de janelas que precisam ser consideradas. O Azure Stream Analytics produz eventos apenas para os pontos no tempo em que um evento entrou ou saiu da janela. Como tal, cada janela contém um mínimo de um evento. Os eventos nas janelas deslizantes podem pertencer a mais de uma janela deslizante, semelhante às janelas de salto.
A consulta a seguir usa a função SlidingWindow()
para encontrar 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)
Sessão
Sessão funções de janela agrupam eventos que chegam em momentos semelhantes, filtrando períodos de tempo onde não há dados. Ele tem 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 a partir do último evento ingerido. Nesse caso, a janela será estendida para incorporar o novo evento. No entanto, se nenhum outro evento ocorrer dentro do período de tempo limite especificado, a janela será fechada no tempo limite. Se os eventos continuarem acontecendo dentro do tempo limite especificado, a janela da sessão se estenderá até que a duração máxima seja atingida.
A consulta a seguir mede a duração da sessão do utilizador criando um SessionWindow
sobre dados de clickstream 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
Snapshot windows agrupa eventos por valores de carimbo de data/hora idênticos. Ao contrário de outros tipos de janelas, 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()
para a cláusula GROUP BY
da consulta.
Por exemplo, a consulta a seguir localiza o valor máximo de leitura para eventos que ocorrem exatamente 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 numa janela com base na igualdade de carimbos temporais.