

在仔細考慮之後，我們決定停止 Amazon Kinesis Data Analytics for SQL 應用程式：

1. 從 **2025 年 9 月 1 日起，**我們不會為 Amazon Kinesis Data Analytics for SQL 應用程式提供任何錯誤修正，因為考慮到即將終止，我們將對其提供有限的支援。

2. 從 **2025 年 10 月 15 日起，**您將無法建立新的 Kinesis Data Analytics for SQL 應用程式。

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

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

# 輪轉窗口（使用 GROUP BY 彙總）
<a name="tumbling-window-concepts"></a>

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

![\[Timeline showing non-overlapping windows processing data streams at distinct time intervals.\]](http://docs.aws.amazon.com/zh_tw/kinesisanalytics/latest/dev/images/window-tumbling-20.png)


例如，使用 `GROUP BY` 子句的彙總查詢會處理輪轉窗口中的資料列。[入門練習](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)的示範串流，會接收您的應用程式內串流 `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. 按照[入門練習](https://docs.aws.amazon.com/kinesisanalytics/latest/dev/get-started-exercise.html)設置應用程式。

1. 用上述 `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);
   ```