Sdílet prostřednictvím


Okno Snímek

✅Eventstream prostředků infrastruktury Azure Stream Analytics ✅

Snapshot okna seskupí události se stejným časovým razítkem. Na rozdíl od jiných typů oken, které vyžadují konkrétní funkci okna (například SessionWindow(), můžete okno snímku použít přidáním System.Timestamp() do klauzule GROUP BY.

Následující diagram znázorňuje datový proud s řadou událostí a jejich mapování do oken snímků.

Diagram okna snímku

System.Timestamp() lze v klauzuli GROUP BY považovat za klíčový sloupec nebo definici okna snímku, protože seskupuje události do okna na základě rovnosti časových razítek. V kombinaci s jinou funkcí okna se System.Timestamp() považuje za klíč, nikoli jako definici okna. System.Timestamp() negeneruje chybu při použití s jinými funkcemi okna na rozdíl od použití více funkcí okna v klauzuli GROUP BY. Použití system.Timestamp() a funkce okna v group BY může být užitečné k dávkování výsledků.

Žádný výraz, který obsahuje System.Timestamp(), se nepovažuje za okno. GROUP BY DATEPART(minute, System.Timestamp()) Například selže s chybou "Okno musí být zadáno".

Syntaxe

System.Timestamp()

Příklady

Základní příklad

Následující příklad vrátí počet tweetů se stejným typem tématu, ke kterému dochází ve stejnou dobu:

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

Příklad snímku přeskakujícího okna

Běžným použitím oken snímků je agregace událostí po jejich seskupení do jednoho časového razítka prostřednictvím předchozí funkce okna, jako je například TumblingWindow níže.

Následující příklad vrátí počet tweetů se stejným typem tématu stejného uživatele do 30minutových intervalů:

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

Pokud chcete zjistit počet uživatelů a celkový počet tweetů na téma ve stejném intervalu, můžete použít výsledek předchozího dotazu. Vzhledem k tomu, že výsledky přeskakujícího okna budou mít všechna časová razítka zarovnaná na 30minutovou hranici, můžete pomocí okna snímku vracet události na každé hranici, protože všechny mají stejnou hodnotu časového razítka.

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

Předchozí dotaz vrátil počet uživatelů a celkový počet tweetů na téma ve stejném 30minutovém intervalu. Pokud chcete získat stejné výsledky jednou za 2 hodiny, přidejte do klauzule GROUP BY přeskakující okno o 2 hodinách.

Následující dotaz vrátí výsledky ze všech čtyř 30minutových intervalů na konci každého 2hodinového intervalu.

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

Příklad agregace oken

System.Timestamp() můžete použít jako jedno z oken v agregované konstruktoru Windows().

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