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:
- Janelas Em cascata
- De salto
- Deslizante
- Sessão
- De instantâneo.
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.
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.
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.
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.
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).
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.
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: