Introdução às funções de janela do Stream Analytics

Em cenários de streaming de tempo, a execução de operações nos dados contidos em janelas temporais é um padrão comum. O Stream Analytics tem suporte nativo para funções de janelas, permitindo que os desenvolvedores criem trabalhos complexos de processamento de fluxo com o mínimo de esforço.

Existem cinco tipos de janelas temporais para escolher:

Use as funções de janela na cláusula GROUP BY da sintaxe de consulta em seus trabalhos do Stream Analytics. Você também pode agregar eventos em várias janelas usando a função Windows().

Todas as operações de janelamento produzem resultados no final da janela. Ao iniciar um trabalho de análise de fluxo, você pode especificar a hora de início da saída do trabalho e o sistema busca automaticamente eventos anteriores nos fluxos de entrada para gerar a primeira janela no horário especificado, por exemplo, quando você começa com a opção Agora, ele começa a emitir dados imediatamente. A saída da janela será um único evento baseado na função agregada usada. O evento de saída tem o carimbo de data/hora do final da janela e todas as funções da janela são definidas com um comprimento fixo.

Diagram that shows the concept of Stream Analytics window functions.

Janela de tombo

Use as funções da janela Tumbling para segmentar um fluxo de dados em segmentos de tempo distintos e executar uma função contra eles.

Os principais diferenciais de uma janela de tombo são:

  • Não se repetem.
  • Eles não se sobrepõem.
  • Um evento não pode pertencer a mais de uma janela de tombo.

Diagram that shows an example Stream Analytics tumbling window.

Aqui estão os dados de entrada para o exemplo:

Selo CreatedAt TimeZone
5 2021-10-26T10:15:01 PST
5 2021-10-26T10:15:03 PST
4 2021-10-26T10:15:06 PST
... ... ...

Aqui está a consulta de exemplo:

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

Aqui está a saída de exemplo:

WindowEndTime TimeZone Count
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 PST 2
2021-10-26T10:15:30 PST 4

Janela de salto

As funções da janela de salto avançam no tempo por um período fixo. Pode ser fácil pensar neles como janelas que podem se sobrepor e ser emitidas com mais frequência do que o tamanho da janela. Os eventos podem pertencer a mais de um conjunto de resultados de janela de Salto. Para tornar uma janela de salto igual a uma janela de tombamento, especifique o tamanho do salto para ser o mesmo que o tamanho da janela.

Diagram that shows an example of the hopping window.

Aqui estão os dados de exemplo:

Selo CreatedAt Tópico
5 2021-10-26T10:15:01 Transmissão
5 2021-10-26T10:15:03 Transmissão
4 2021-10-26T10:15:06 Transmissão
... ... ...

Aqui está a consulta de exemplo:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

Aqui está a saída de exemplo:

WindowEndTime Tópico Count
2021-10-26T10:15:10 Transmissão 5
2021-10-26T10:15:15 Transmissão 3
2021-10-26T10:15:20 Transmissão 2
2021-10-26T10:15:25 Transmissão 4
2021-10-26T10:15:30 Transmissão 4

Janela de correr

As janelas deslizantes , ao contrário das janelas de tombamento ou salto, produzem eventos apenas para pontos no tempo em que o conteúdo da janela realmente muda. Em outras palavras, quando um evento entra ou sai da janela. Assim, cada janela tem pelo menos um evento. Semelhante às janelas saltitantes, os eventos podem pertencer a mais de uma janela deslizante.

Diagram that shows an example of a sliding window.

Aqui estão os dados de entrada de exemplo:

Selo CreatedAt Tópico
5 2021-10-26T10:15:10 Transmissão
5 2021-10-26T10:15:12 Transmissão
9 2021-10-26T10:15:15 Transmissão
7 2021-10-26T10:15:15 Transmissão
8 2021-10-26T10:15:27 Transmissão

Aqui está a consulta de exemplo:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

Resultado:

WindowEndTime Tópico Count
2021-10-26T10:15:15 Transmissão 4
2021-10-26T10:15:20 Transmissão 3

Janela da sessão

As funções da janela de sessão agrupam eventos que chegam em horários semelhantes, filtrando períodos de tempo em que não há dados. Tem três parâmetros principais:

  • Limite de tempo excedido
  • Duração máxima
  • Chave de particionamento (opcional).

Diagram that shows a sample Stream Analytics session window.

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. Os intervalos de verificação de duração máxima são definidos para serem do mesmo tamanho que a duração máxima especificada. Por exemplo, se a duração máxima é 10, então as verificações sobre se a janela excede a duração máxima acontecem em t = 0, 10, 20, 30, etc.

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. Esse particionamento é útil para casos em que você precisa de janelas de sessão diferentes para usuários ou dispositivos diferentes.

Aqui estão os dados de entrada de exemplo:

Selo CreatedAt Tópico
5 2021-10-26T10:15:01 Transmissão
2 2021-10-26T10:15:04 Transmissão
3 2021-10-26T10:15:13 Transmissão
... ... ...

Aqui está a consulta de exemplo:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

Resultado:

WindowEndTime Tópico Count
2021-10-26T10:15:09 Transmissão 2
2021-10-26T10:15:24 Transmissão 4
2021-10-26T10:15:31 Transmissão 2
2021-10-26T10:15:39 Transmissão 5

Janela de instantâneo

Snapshot windows agrupa eventos que têm o mesmo carimbo de data/hora. Ao contrário de outros tipos de janelas, que exigem uma função de janela específica (como SessionWindow()), você pode aplicar uma janela de instantâneo adicionando System.Timestamp() à cláusula GROUP BY.

Diagram that shows a sample Steam Analytics snapshot window.

Aqui estão os dados de entrada de exemplo:

Selo CreatedAt Tópico
5 2021-10-26T10:15:04 Transmissão
2 2021-10-26T10:15:04 Transmissão
3 2021-10-26T10:15:04 Transmissão
... ... ...

Aqui está a consulta de exemplo:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

Aqui está a saída de exemplo:

WindowEndTime Tópico Count
2021-10-26T10:15:04 Transmissão 4
2021-10-26T10:15:10 Transmissão 2
2021-10-26T10:15:13 Transmissão 5
2021-10-26T10:15:22 Transmissão 2

Próximos passos

Consulte os seguintes artigos: