Rollierende Fenster (Zusammenfassungen mit GROUP BY) - Entwicklerhandbuch für Amazon Kinesis Data Analytics for SQL Applications

Für neue Projekte empfehlen wir, den neuen Managed Service für Apache Flink Studio anstelle von Kinesis Data Analytics for SQL Applications zu verwenden. Der Managed Service für Apache Flink Studio kombiniert Benutzerfreundlichkeit mit fortschrittlichen Analysefunktionen, sodass Sie in wenigen Minuten anspruchsvolle Anwendungen zur Stream-Verarbeitung erstellen können.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Rollierende Fenster (Zusammenfassungen mit GROUP BY)

Wenn eine Abfrage mit Fenster jedes Fenster so verarbeitet, dass diese sich nicht überschneiden, wird das Fenster als rollierendes Fenster bezeichnet. In diesem Fall gehört jeder Datensatz in einem In-Application-Stream zu einem bestimmten Fenster. Er wird nur einmal verarbeitet (wenn die Abfrage das Fenster verarbeitet, zu dem der Datensatz gehört).

Timeline showing non-overlapping windows processing data streams at distinct time intervals.

Beispielsweise verarbeitet eine Zusammenfassungsabfrage, die eine GROUP BY-Klausel verwendet, Zeilen in einem rollierenden Fenster. Der Demo-Stream in der Erste Schritte-Übung empfängt Aktienpreisdaten, die dem In-Application-Stream SOURCE_SQL_STREAM_001 in Ihrer Anwendung zugeordnet sind. Dieser Stream weist das folgende Schema auf.

(TICKER_SYMBOL VARCHAR(4), SECTOR varchar(16), CHANGE REAL, PRICE REAL)

Angenommen, Sie möchten in Ihrem Anwendungscode zusammengefasste Mindest-/Höchstpreise für jeden Ticker im Zeitraum von einer Minute finden. Sie können die folgende Abfrage verwenden.

SELECT STREAM ROWTIME, Ticker_Symbol, MIN(Price) AS Price, MAX(Price) AS Price FROM "SOURCE_SQL_STREAM_001" GROUP BY Ticker_Symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);

Das vorherige Beispiel ist eine Abfrage mit Fenster auf Zeitbasis. Die Abfrage gruppiert Datensätze nach ROWTIME-Werten. Für Berichte auf Minutenbasis rundet die Funktion STEP die ROWTIME-Werte auf die nächste Minute ab.

Anmerkung

Sie können auch die FLOOR-Funktion verwenden, um Datensätze in Fenstern zu gruppieren. Die Funktion FLOOR kann Zeitwerte jedoch nur auf eine gesamte Zeiteinheit (Stunde, Minute, Sekunde usw.) abrunden. STEP wird für die Gruppierung von Datensätzen in rollierende Zeitfenster empfohlen, da hierdurch Werte auf ein beliebiges Intervall, z. B. 30 Sekunden, abgerundet werden können.

Diese Abfrage ist ein Beispiel für ein nicht überschneidendes (rollierendes) Fenster. Die GROUP BY-Klausel gruppiert Datensätze in einem Fenster von einer Minute. Jeder Datensatz gehört zu einem bestimmten Fenster (keine Überschneidungen). Die Abfrage gibt eine einzelne Ausgabe pro Minute aus und stellt den Minimum-/Maximum-Tickerpreis bereit, der während dieser bestimmten Minute aufgezeichnet wurde. Diese Art von Abfrage ist nützlich, um aus dem Eingabedaten-Stream regelmäßige Berichte zu generieren. In diesem Beispiel werden jede Minute Berichte generiert.

So testen Sie die Abfrage
  1. Richten Sie anhand der Erste Schritte-Übung eine Anwendung ein.

  2. Ersetzen Sie die SELECT-Anweisung im Anwendungscode durch die vorherige SELECT-Abfrage. Der resultierende Anwendungscode wird im Folgenden gezeigt:

    CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), Min_Price DOUBLE, Max_Price DOUBLE); -- CREATE OR REPLACE PUMP to insert into output CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM Ticker_Symbol, MIN(Price) AS Min_Price, MAX(Price) AS Max_Price FROM "SOURCE_SQL_STREAM_001" GROUP BY Ticker_Symbol, STEP("SOURCE_SQL_STREAM_001".ROWTIME BY INTERVAL '60' SECOND);