Udostępnij za pośrednictwem


Okno migawki (Azure Stream Analytics)

Migawki okien grupuje zdarzenia, które mają ten sam znacznik czasu. W przeciwieństwie do innych typów okien, które wymagają określonej funkcji okna (takiej jak SessionWindow(), można zastosować okno migawki, dodając element System.Timestamp() do klauzuli GROUP BY.

Na poniższym diagramie przedstawiono strumień z serią zdarzeń i sposobem mapowania ich na okna migawki.

Diagram okna migawki

Element System.Timestamp() można uznać za klauzulę GROUP BY jako kolumnę klucza lub definicję okna migawki, ponieważ grupuje zdarzenia w oknie na podstawie równości sygnatur czasowych. W połączeniu z inną funkcją okna element System.Timestamp() jest traktowany jako klucz, a nie jako definicja okna. System.Timestamp() nie generuje błędu w przypadku użycia z innymi funkcjami okna, w przeciwieństwie do tego, gdy w klauzuli GROUP BY jest używanych wiele funkcji okien. Użycie funkcji System.Timestamp() i okna w grupie GROUP BY może być przydatne w celu wsadowania wyników.

Każde wyrażenie zawierające element System.Timestamp() nie jest uznawane za okno. Na przykład GROUP BY DATEPART(minute, System.Timestamp()) błąd kończy się niepowodzeniem z powodu błędu "należy określić okno".

Składnia

System.Timestamp()

Przykłady

Przykład podstawowy

Poniższy przykład zwraca liczbę tweetów o tym samym typie tematu, które występują dokładnie w tym samym czasie:

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

Przykład migawki okna wirowania

Typowym użyciem okien migawek jest agregowanie zdarzeń po zgrupowaniu ich na pojedynczej sygnaturze czasowej za pośrednictwem poprzedniej funkcji okna, takiej jak TumblingWindow poniżej.

Poniższy przykład zwraca liczbę tweetów o tym samym typie tematu przez tego samego użytkownika w ciągu 30 minut:

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

Aby znaleźć liczbę użytkowników i łączną liczbę tweetów na temat w tym samym interwale, możesz użyć wyniku poprzedniego zapytania. Ze względu na wyniki okna wirowania wszystkie znaczniki czasu będą wyrównane do granicy 30 minut, można użyć okna migawki, aby zwrócić zdarzenia na każdej granicy, ponieważ wszystkie mają tę samą wartość znacznika czasu.

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

Poprzednie zapytanie zwróciło liczbę użytkowników i łączną liczbę tweetów na temat w tym samym interwale 30 minut. Aby uzyskać te same wyniki raz na 2 godziny, dodaj okno wirowania 2 godziny do klauzuli GROUP BY.

Poniższe zapytanie zwraca wyniki ze wszystkich czterech 30-minutowych interwałów na końcu każdego 2-godzinnego okna.

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

Przykład agregacji okien

Możesz użyć elementu System.Timestamp() jako jednego z okien w konstrukcji zagregowanej systemu Windows().

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