Freigeben über


Momentaufnahmefenster

✅ Azure Stream Analytics ✅ Fabric Eventstream

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

Das folgende Diagramm veranschaulicht einen Datenstrom mit einer Reihe von Ereignissen und deren Zuordnung zu Momentaufnahmenfenstern.

Diagramm des Momentaufnahmefensters

System.Timestamp() kann in der GROUP BY-Klausel als Schlüsselspalte oder als Definition eines Momentaufnahmefensters betrachtet werden, da sie Ereignisse basierend auf der Gleichheit von Zeitstempeln in ein Fenster gruppiert. In Kombination mit einer anderen Fensterfunktion wird System.Timestamp() als Schlüssel und nicht als Fensterdefinition behandelt. System.Timestamp() erzeugt keinen Fehler, wenn er mit anderen Fensterfunktionen verwendet wird, im Gegensatz dazu, wenn mehrere Fensterfunktionen in der GROUP BY-Klausel verwendet werden. Die Verwendung von System.Timestamp() und einer Fensterfunktion in der GROUP BY-Datei kann hilfreich sein, um die Ergebnisse zu stapeln.

Jeder Ausdruck, der System.Timestamp() enthält, wird nicht als Fenster betrachtet. GROUP BY DATEPART(minute, System.Timestamp()) Beispielsweise schlägt mit dem Fehler "Ein Fenster muss angegeben werden" fehl.

Syntax

System.Timestamp()

Beispiele

Einfaches Beispiel

Im folgenden Beispiel wird die Anzahl der Tweets mit demselben Thementyp zurückgegeben, der gleichzeitig auftritt:

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

Beispiel für eine Momentaufnahme des Tumbling-Fensters

Eine häufige Verwendung von Momentaufnahmenfenstern besteht darin, Ereignisse zu aggregieren, nachdem sie über eine vorherige Fensterfunktion wie TumblingWindow unten auf einem einzelnen Zeitstempel gruppiert wurden.

Im folgenden Beispiel wird die Anzahl der Tweets mit demselben Thementyp vom gleichen Benutzer innerhalb von 30 Minuten 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 finden, können Sie das Ergebnis der vorherigen Abfrage verwenden. Aufgrund der Ergebnisse des Sturzfensters werden alle Zeitstempel an der Grenze von 30 Minuten ausgerichtet, sie können ein Momentaufnahmefenster verwenden, um Ereignisse an jeder Grenze zurückzugeben, da sie alle den gleichen Zeitstempelwert aufweisen.

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 Sturzfenster von 2 Stunden hinzu.

Die folgende Abfrage gibt Ergebnisse aus allen vier 30 Minuten Intervallen am Ende jedes 2-Stunden-Fensters 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 Aggregat-Windows()-Konstrukt verwenden.

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