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.
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.
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.
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.
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).
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.
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: