輪轉窗口(使用 GROUP BY 彙總) - Amazon Kinesis Data Analytics for SQL Applications 開發人員指南

在仔細考慮之後,我們決定在兩個步驟中停止 Amazon Kinesis Data Analytics for SQL 應用程式:

1. 從 2025 年 10 月 15 日起,您將無法為SQL應用程式建立新的 Kinesis Data Analytics。

2. 我們將從 2026 年 1 月 27 日起刪除您的應用程式。您將無法啟動或操作SQL應用程式的 Amazon Kinesis Data Analytics。從那時SQL起,Amazon Kinesis Data Analytics 將不再提供 的支援。如需詳細資訊,請參閱Amazon Kinesis Data Analytics for SQL 應用程式終止

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

輪轉窗口(使用 GROUP BY 彙總)

當窗口查詢以非重疊的方式處理每個窗口時,即稱作輪轉窗口。在此情況下,應用程式內串流上的每個記錄都屬於一個特定窗口。紀錄只會被處理一次(當查詢處理記錄所屬的窗口時)。

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

例如,使用 GROUP BY 子句的彙總查詢會處理輪轉窗口中的資料列。入門練習的示範串流,會接收您的應用程式內串流 SOURCE_SQL_STREAM_001 之股票價格資料。這個串流具有以下結構描述:

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

在應用程式碼中,假設您想要在一分鐘的窗口中尋找每個股票代號的彙總 (最低、最大值) 價格。您可以使用下列查詢:

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);

前面是以時間為基礎的窗口化查詢範例。此查詢按 ROWTIME 值為記錄分組。針對每分鐘進行報告,STEP 函數會將 ROWTIME 值無條件捨去至最接近的分鐘。

注意

您也可以使用 FLOOR 函數來將記錄分組至窗口。但是,FLOOR 只能將時間值捨去到完整時間單位 (小時、分鐘、秒等)。建議使用 STEP 將記錄分組到輪轉窗口中,因為它可以將值捨去到任意間隔,例如 30 秒。

此查詢是非重疊(輪轉)窗口的例子。GROUP BY 子句會將記錄分組在一分鐘的窗口中,而且每個記錄都屬於特定的窗口 (不重疊)。該查詢每分鐘發出一個輸出記錄,提供在特定分鐘記錄的最小/最大股票價格。如要從輸入資料串流生成定期報告,這種類型的查詢就非常有用。在此範例中,每分鐘產生一次報告。

若要測試查詢
  1. 按照入門練習設置應用程式。

  2. 用上述 SELECT 查詢取代應用程式碼中的 SELECT 陳述式。產生的應用程式碼如下所示:

    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);