Sdílet prostřednictvím


Okno snímku (Azure Stream Analytics)

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

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

Snímek diagramu okna

System.Timestamp() lze považovat v klauzuli GROUP BY 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íč, a ne 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í funkce System.Timestamp() a window v příkazu GROUP BY může být užitečné pro dávkování výsledků.

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

Syntax

System.Timestamp()

Příklady

Základní příklad

Následující příklad vrátí počet tweetů se stejným typem tématu, které se vyskytují přesně 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 využitím oken snímků je agregace událostí po jejich seskupení podle 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 od stejného uživatele v 30minutových intervalech:

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 pro přeskakující okno budou mít všechna časová razítka zarovnaná na hranici 30 minut, můžete použít okno snímku k vrácení událostí 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 interval pro přeskakování 2 hodin.

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

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

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