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