Ögonblicksbildsfönster (Azure Stream Analytics)
Ögonblicksbild windows grupper händelser som har samma tidsstämpel. Till skillnad från andra fönstertyper, som kräver en specifik fönsterfunktion (till exempel SessionWindow(), kan du använda ett ögonblicksbildsfönster genom att lägga till System.Timestamp() i GROUP BY-satsen.
Följande diagram illustrerar en ström med en serie händelser och hur de mappas till ögonblicksbildsfönster.
System.Timestamp() kan betraktas i GROUP BY-satsen som en nyckelkolumn eller en definition av ögonblicksbildsfönstret eftersom den grupperar händelser i ett fönster baserat på likheten mellan tidsstämplar. I kombination med en annan fönsterfunktion behandlas System.Timestamp() som en nyckel och inte som en fönsterdefinition. System.Timestamp() genererar inget fel när det används med andra fönsterfunktioner, till skillnad från när flera fönsterfunktioner används i GROUP BY-satsen. Att använda både System.Timestamp() och en fönsterfunktion i GROUP BY kan vara användbart för att batcha resultatet.
Uttryck som innehåller System.Timestamp() betraktas inte som ett fönster. Misslyckas till exempel GROUP BY DATEPART(minute, System.Timestamp())
med felet "ett fönster måste anges".
Syntax
System.Timestamp()
Exempel
Grundläggande exempel
I följande exempel returneras antalet tweets med samma ämnestyp som inträffar exakt samtidigt:
SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
Exempel på ögonblicksbild av rullande fönster
En vanlig användning för ögonblicksbildfönster är att aggregera händelser efter att de har grupperats på en enda tidsstämpel via en tidigare fönsterfunktion, till exempel TumblingWindow nedan.
I följande exempel returneras antalet tweets med samma ämnestyp av samma användare inom 30 minuters intervall:
WITH PerInterval AS (
SELECT Topic, User, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval
Om du vill hitta antalet användare och totalt antal tweets per ämne inom samma intervall kan du använda resultatet av föregående fråga. På grund av resultatet från rullande fönster har alla tidsstämplar justerade till gränsen på 30 minuter. Du kan använda ett ögonblicksbildfönster för att returnera händelser vid varje gräns eftersom de alla har samma tidsstämpelvärde.
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()
Föregående fråga returnerade antalet användare och totalt antal tweets per ämne inom samma intervall på 30 minuter. Om du vill få samma resultat en gång per 2 timmar lägger du till ett rullande fönster på 2 timmar i GROUP BY-satsen.
Följande fråga returnerar resultat från alla fyra 30 minuters intervall i slutet av varje 2-timmarsfönster.
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)
Exempel på sammanställda fönster
Du kan använda System.Timestamp() som ett av fönstren i den aggregerade Windows()-konstruktionen.
SELECT
TollId,
COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY
TollId,
Windows(
TumblingWindow(minute, 10),
TumblingWindow(minute, 20),
System.Timestamp())