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

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

Há 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 usar evento agregado em várias janelas com a função Windows().

Todas as operações de janela resultam no fim da janela. Ao iniciar um trabalho de análise de fluxo, você poderá especificar o Horário 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ê iniciar com a opção Agora, ela começará a emitir dados imediatamente. A saída da janela será um evento único 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 em Cascata

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

Os principais diferenciadores de uma janela em cascata são:

  • Elas não se repetem.
  • Elas não se sobrepõem.
  • Um evento não pode pertencer a mais de uma janela em cascata.

Diagram that shows an example Stream Analytics tumbling window.

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

Carimbo CreatedAt TimeZone
1 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)

Veja o exemplo de saída:

WindowEndTime TimeZone Contagem
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 pulam para frente segundo um período fixo. Pode ser fácil pensar nelas como janelas em cascata 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 da Janela de Salto. Para criar uma Janela de Salto da mesma forma que uma Janela em Cascata, especifique o tamanho do salto para ser do mesmo tamanho da janela.

Diagram that shows an example of the hopping window.

Aqui estão os dados de exemplo:

Carimbo CreatedAt Tópico
1 2021-10-26T10:15:01 Streaming
5 2021-10-26T10:15:03 Streaming
4 2021-10-26T10:15:06 Streaming
... ... ...

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)

Veja o exemplo de saída:

WindowEndTime Tópico Contagem
2021-10-26T10:15:10 Streaming 5
2021-10-26T10:15:15 Streaming 3
2021-10-26T10:15:20 Streaming 2
2021-10-26T10:15:25 Streaming 4
2021-10-26T10:15:30 Streaming 4

Janela Deslizante

As janelas Deslizantes, diferente das janelas em cascata ou de salto, geram eventos apenas para momentos em que o conteúdo da janela realmente muda. Em outras palavras, quando um evento entra ou sai da janela. Portanto, cada janela tem pelo menos um evento. Como nas janelas de salto, 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:

Carimbo CreatedAt Tópico
1 2021-10-26T10:15:10 Streaming
5 2021-10-26T10:15:12 Streaming
9 2021-10-26T10:15:15 Streaming
7 2021-10-26T10:15:15 Streaming
8 2021-10-26T10:15:27 Streaming

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

Saída:

WindowEndTime Tópico Contagem
2021-10-26T10:15:15 Streaming 4
2021-10-26T10:15:20 Streaming 3

Janela de sessão

As funções da janela de Sessão agrupam os eventos que chegam em momentos semelhantes, filtrando períodos em que não há nenhum dado. Ela tem três parâmetros principais:

  • Tempo limite
  • 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 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 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 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 excede a duração máxima ocorrerão 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 de forma independente. Esse particionamento é útil para casos em que você precisa de diferentes janelas de sessão para diferentes usuários ou dispositivos.

Aqui estão os dados de entrada de exemplo:

Carimbo CreatedAt Tópico
1 2021-10-26T10:15:01 Streaming
2 2021-10-26T10:15:04 Streaming
3 2021-10-26T10:15:13 Streaming
... ... ...

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)

Saída:

WindowEndTime Tópico Contagem
2021-10-26T10:15:09 Streaming 2
2021-10-26T10:15:24 Streaming 4
2021-10-26T10:15:31 Streaming 2
2021-10-26T10:15:39 Streaming 1

Janela de instantâneo

Janelas de Instantâneo agrupam eventos que têm o mesmo carimbo de data/hora. Ao contrário de outros tipos de janela, 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:

Carimbo CreatedAt Tópico
1 2021-10-26T10:15:04 Streaming
2 2021-10-26T10:15:04 Streaming
3 2021-10-26T10:15:04 Streaming
... ... ...

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()

Veja o exemplo de saída:

WindowEndTime Tópico Contagem
2021-10-26T10:15:04 Streaming 4
2021-10-26T10:15:10 Streaming 2
2021-10-26T10:15:13 Streaming 1
2021-10-26T10:15:22 Streaming 2

Próximas etapas

Veja os artigos a seguir: