Janela de instantâneo (Azure Stream Analytics)

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

O diagrama seguinte ilustra um fluxo com uma série de eventos e como são mapeados em janelas de instantâneos.

Diagrama de janela de instantâneo

System.Timestamp() pode ser considerado na cláusula GROUP BY como uma coluna de chave ou uma definição de janela de instantâneo porque agrupa eventos numa janela com base na igualdade de carimbos de data/hora. Quando combinado com outra função de janela, System.Timestamp() é tratado como uma chave e não como uma definição de janela. System.Timestamp() não produz um erro quando utilizado com outras funções de janela, ao contrário de quando são utilizadas várias funções de janela na cláusula GROUP BY. Utilizar System.Timestamp() e uma função de janela no GROUP BY pode ser útil para colocar os resultados em lote.

Qualquer expressão que contenha System.Timestamp() não é considerada uma janela. Por exemplo, GROUP BY DATEPART(minute, System.Timestamp()) falha com o erro "tem de ser especificada uma janela".

Syntax

System.Timestamp()

Exemplos

Exemplo básico

O exemplo seguinte devolve a contagem de tweets com o mesmo tipo de tópico que ocorre exatamente ao mesmo tempo:

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

Exemplo de instantâneo de janela em cascata

Uma utilização comum para janelas de instantâneos é agregar eventos depois de terem sido agrupados num único carimbo de data/hora através de uma função de janela anterior, como o TumblingWindow abaixo.

O exemplo seguinte devolve a contagem de tweets com o mesmo tipo de tópico pelo mesmo utilizador dentro de intervalos de 30 minutos:

WITH PerInterval AS (
    SELECT Topic, User, COUNT(*)
    FROM TwitterStream TIMESTAMP BY CreatedAt
    GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval

Para localizar o número de utilizadores e o total de tweets por tópico dentro do mesmo intervalo, pode utilizar o resultado da consulta anterior. Devido aos resultados da janela em cascata, todos terão carimbos de data/hora alinhados com o limite de 30 minutos, pode utilizar uma janela de instantâneo para devolver eventos em cada limite, uma vez que todos têm o mesmo valor de carimbo de data/hora.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()

A consulta anterior devolveu o número de utilizadores e o total de tweets por tópico dentro do mesmo intervalo de 30 minutos. Para obter os mesmos resultados uma vez por 2 horas, adicione uma janela em cascata de 2 horas à cláusula GROUP BY.

A consulta seguinte devolve resultados dos quatro intervalos de 30 minutos no final de cada janela de 2 horas.

SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)

Exemplo de agregação do Windows

Pode utilizar System.Timestamp() como uma das janelas na construção agregada do Windows().

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows(
        TumblingWindow(minute, 10),
        TumblingWindow(minute, 20),
        System.Timestamp())