Momentaufnahmefenster (Azure Stream Analytics)

Momentaufnahmefenster gruppieren Ereignisse, die denselben Zeitstempel haben. Im Gegensatz zu anderen Fenstertypen, die eine bestimmte Fensterfunktion benötigen (z. B. SessionWindow()), können Sie ein Momentaufnahmefenster anwenden, indem Sie der GROUP BY-Klausel „System.Timestamp()“ hinzufügen.

Das folgende Diagramm veranschaulicht einen Stream mit einer Reihe von Ereignissen und deren Zuordnung zu Momentaufnahme Fenstern.

Diagramm des Momentaufnahmefensters

System.Timestamp() kann in der GROUP BY-Klausel als Schlüsselspalte oder als Momentaufnahme Fensterdefinition betrachtet werden, da Ereignisse basierend auf der Gleichheit von Zeitstempeln in einem Fenster gruppiert werden. In Kombination mit einer anderen Fensterfunktion wird System.Timestamp() als Schlüssel und nicht als Fensterdefinition behandelt. System.Timestamp() erzeugt keinen Fehler, wenn es mit anderen Fensterfunktionen verwendet wird, im Gegensatz zur Verwendung mehrerer Fensterfunktionen in der GROUP BY-Klausel. Die Verwendung von System.Timestamp() und einer Fensterfunktion in GROUP BY kann nützlich sein, um die Ergebnisse zu batchen.

Jeder Ausdruck, der System.Timestamp() enthält, wird nicht als Fenster betrachtet. Tritt beispielsweise GROUP BY DATEPART(minute, System.Timestamp()) der Fehler "Ein Fenster muss angegeben werden" auf.

Syntax

System.Timestamp()

Beispiele

Einfaches Beispiel

Im folgenden Beispiel wird die Anzahl von Tweets mit demselben Thementyp zurückgegeben, die genau zur gleichen Zeit auftreten:

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

Rollierendes Fenster Momentaufnahme Beispiel

Eine häufige Verwendung für Momentaufnahme Fenstern besteht darin, Ereignisse zu aggregieren, nachdem sie über eine vorangehende Fensterfunktion wie TumblingWindow unten in einem einzelnen Zeitstempel gruppiert wurden.

Im folgenden Beispiel wird die Anzahl von Tweets mit demselben Thementyp vom gleichen Benutzer innerhalb von 30-Minuten-Intervallen zurückgegeben:

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

Um die Anzahl der Benutzer und die Gesamtzahl der Tweets pro Thema innerhalb desselben Intervalls zu ermitteln, können Sie das Ergebnis der vorherigen Abfrage verwenden. Da alle Ergebnisse des rollierenden Fensters Zeitstempel an der 30-Minuten-Grenze ausgerichtet haben, können Sie ein Momentaufnahme Fenster verwenden, um Ereignisse an jeder Grenze zurückzugeben, da sie alle denselben Zeitstempelwert haben.

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

Die vorherige Abfrage hat die Anzahl der Benutzer und die Gesamtzahl der Tweets pro Thema innerhalb des gleichen 30-Minuten-Intervalls zurückgegeben. Um die gleichen Ergebnisse einmal pro 2 Stunden zu erhalten, fügen Sie der GROUP BY-Klausel ein rollierendes Fenster von 2 Stunden hinzu.

Die folgende Abfrage gibt Am Ende jedes 2-Stunden-Fensters Ergebnisse aus allen vier Intervallen von 30 Minuten zurück.

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

Beispiel für Aggregatfenster

Sie können System.Timestamp() als eines der Fenster im aggregaten Windows()-Konstrukt verwenden.

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