WINDOW 子句 (滑动窗口) - Amazon Kinesis Data Analytics
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

WINDOW 子句 (滑动窗口)

这些区域有:WINDOW滑动窗口查询的子句指定了相对于当前行在一组行中计算分析函数的行。这些聚合函数生成一个输出行,该行由每个输入行的一列或多列中的键聚合。这些区域有:WINDOW查询中的子句指定按时间范围间隔或行数分区的流中的记录,以及由PARTITION BY子句。您可以定义可用于分析函数和流式处理的命名或内联窗口规范JOIN子句。有关分析函数的更多信息,请参阅分析函数

滑动窗口查询中的聚合函数是在滑动窗口中指定的每列上执行的OVER子句。这些区域有:OVER子句可以引用已命名的窗口规范,也可以作为SELECT泵的声明。以下示例说明如何使用 OVER 子句引用指定的窗口规范并在 SELECT 语句中内联使用。

语法

[WINDOW window_name AS ( {PARTITION BY partition_name RANGE INTERVAL 'interval' {SECOND | MINUTE | HOUR} PRECEDING | ROWS number PRECEDING , …} )

OVER 子句

以下示例说明如何使用 OVER 子句引用指定的窗口规范。

示例 1:OVER 引用命名窗口规范

以下示例显示了一个聚合函数,该函数引用了名为 W1 的窗口规范。在此示例中,平均价格是根据指定的一组记录计算得出的W1窗口规格。要了解有关如何将 OVER 子句与窗口规范结合使用的更多信息,请参阅示例

AVG(price) OVER W1 AS avg_price

示例 2:OVER 引用内联窗口规范

以下示例显示了一个引用内联窗口规范的聚合函数。在此示例中,使用行内窗口规格计算每个输入行的平均价格。要了解有关如何将 OVER 子句与窗口规范结合使用的更多信息,请参阅示例

AVG(price) OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' HOUR PRECEDING) AS avg_price

有关聚合函数和 OVER 子句的更多信息,请参阅聚合函数

参数

window-name

指定可从 OVER 子句或后续窗口定义中引用的唯一名称。该名称用于分析函数和流式传输JOIN子句。有关分析函数的更多信息,请参阅分析函数

AS

WINDOW 子句定义指定的窗口规范。

PARTITION BY partition-name

将行分成共享相同值的组。在对行进行划分后,窗口函数将计算当前行所在划分中的所有行。

RANGE INTERVAL 'interval' {SECOND | MINUTE | HOUR} PRECEDING

从时间范围间隔开始指定窗口边界。窗口函数将计算具有与当前行相同的时间间隔的所有行。

ROWS number PRECEDING

根据行数指定窗口边界。窗口函数将计算在相同行数内的所有行。

示例

示例数据集

以下示例基于样本股票数据集,该数据集是其中的一部分开始使用Amazon Kinesis Analytics. 要运行每个示例,您需要一个具有示例股票行情输入流的 Amazon Kinesis Analytics 应用程序。要了解如何创建 Analytics App 和配置示例股票行情输入流,请参阅开始使用Amazon Kinesis Analytics. 有关其他示例,请参阅滑动窗口

具有以下架构的示例股票数据集。

(ticker_symbol VARCHAR(4), sector VARCHAR(16), change REAL, price REAL)

示例 1:基于时间的滑动窗口,引用了命名窗口规范

此示例定义了一个命名窗口规范,其分区边界在当前行之前一分钟。数据泵的 OVER 语句的 SELECT 子句引用指定的窗口规范。

WINDOW W1 AS ( PARTITION BY ticker_symbol RANGE INTERVAL '1' MINUTE PRECEDING);

要运行此示例,请创建股票示例应用程序,并运行和保存以下 SQL 代码。

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), min_price DOUBLE, max_price DOUBLE, avg_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, MIN(price) OVER W1 AS min_price, MAX(price) OVER W1 AS max_price, AVG(price) OVER W1 AS avg_price FROM "SOURCE_SQL_STREAM_001" WINDOW W1 AS ( PARTITION BY ticker_symbol RANGE INTERVAL '1' MINUTE PRECEDING);

上一示例输出的流与以下内容类似。

示例 2:基于行的滑动窗口,引用了命名窗口规范

此示例定义了一个命名窗口规范,其分区边界为当前行前两行,当前行前十行。数据泵的 OVER 语句的 SELECT 子句引用指定的窗口规范。

WINDOW last2rows AS (PARTITION BY ticker_symbol ROWS 2 PRECEDING), last10rows AS (PARTITION BY ticker_symbol ROWS 10 PRECEDING);

要运行此示例,请创建股票示例应用程序,并运行和保存以下 SQL 代码。

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), price DOUBLE, avg_last2rows DOUBLE, avg_Last10rows DOUBLE); CREATE OR REPLACE PUMP "myPump" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, price, AVG(price) OVER last2rows, AVG(price) OVER last10rows FROM SOURCE_SQL_STREAM_001 WINDOW last2rows AS (PARTITION BY ticker_symbol ROWS 2 PRECEDING), last10rows AS (PARTITION BY ticker_symbol ROWS 10 PRECEDING);

上一示例输出的流与以下内容类似。

示例 3:带内嵌窗口规范的基于时间的滑动窗规范

此示例定义了一个行内窗口规范,其分区边界在当前行之前一分钟。数据泵的 OVER 语句的 SELECT 子句使用内联窗口规范。

要运行此示例,请创建股票示例应用程序,并运行和保存以下 SQL 代码。

CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" ( ticker_symbol VARCHAR(4), price DOUBLE, avg_price DOUBLE); CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM" SELECT STREAM ticker_symbol, price, AVG(Price) OVER ( PARTITION BY ticker_symbol RANGE INTERVAL '1' HOUR PRECEDING) AS avg_price FROM "SOURCE_SQL_STREAM_001"

上一示例输出的流与以下内容类似。

使用说明

对于 WINDOW 子句和终端节点,Amazon Kinesis Analytics SQL 在某个范围内遵循窗口的 SQL-2008 标准。

要包括 1 小时的终端节点,您可以使用以下窗口语法。

WINDOW HOUR AS (RANGE INTERVAL '1' HOUR PRECEDING)

要排除上一个小时的终端节点,您可以使用以下窗口语法。

WINDOW HOUR AS (RANGE INTERVAL '59:59.999' MINUTE TO SECOND(3) PRECEDING);

有关更多信息,请参阅 允许和禁止的窗口规范

相关主题