滚动窗口(使用 GROUP BY 组的聚合) - Amazon Kinesis Data Analytics for SQL 应用程序开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

滚动窗口(使用 GROUP BY 组的聚合)

当一个窗口式查询以非重叠方式处理每个窗口时,这样的窗口称为滚动窗口。在这种情况下,应用程序内部流上的每个记录属于特定窗口。它只处理一次(当查询处理记录所属的窗口时)。

例如,使用 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);