滚动窗口(使用 GROUP BY 组的聚合) - SQL适用于应用程序的 Amazon Kinesis Data Analytics 开发者指南

经过仔细考虑,我们决定分两个步骤停止使用亚马逊 Kinesis Data Analytics SQL 的应用程序:

1. 从 2025 年 10 月 15 日起,您将无法为应用程序创建新的 Kinesis Data Analytic SQL s。

2. 我们将从 2026 年 1 月 27 日起删除您的申请。您将无法启动或操作适用于应用程序的 Amazon Kinesis Data Analytic SQL s。从那时起,亚马逊 Kinesis Data Analytics SQL 将不再提供支持。有关更多信息,请参阅 适用于应用程序的 Amazon Kinesis Data Analytic SQL s 停产

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

滚动窗口(使用 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);