窗口示例 - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

窗口示例

以下示例显示了一个示例输入数据集、多个窗口的定义和这些窗口在 10:00 (此示例中数据开始到达的时间) 之后不同时间的内容。

窗口定义如下:

SELECT STREAM  ticker,  sum(amount) OVER lastHour,  count(*) OVER lastHour  sum(amount) OVER lastThree FROM Trades WINDOW  lastHour AS (RANGE INTERVAL '1' HOUR PRECEDING),  lastThree AS (ROWS 3 PRECEDING),  lastZeroRows AS (ROWS CURRENT ROW),  lastZeroSeconds AS (RANGE CURRENT ROW),  lastTwoSameTicker AS (PARTITION BY ticker ROWS 2 PRECEDING),  lastHourSameTicker AS (PARTITION BY ticker RANGE INTERVAL '1' HOUR PRECEDING)

第一个示例:基于时间的窗口与基于行的窗口

如下图右侧所示,基于时间的 lastHour 窗口包含不同的行数,因为窗口成员资格是由时间范围定义的。

包含行的窗口的示例

基于行的 lastThree 窗口通常包含四个行:之前的三个行和当前的行。但是,行 10:10 IBM 仅包含两个行,因为 10:00 之前没有数据。

一个基于行的窗口可包含多个具有相同的 ROWTIME 值的行,但这些行在不同的时间到达 (挂钟时间)。基于行的窗口中此类行的顺序取决于其到达时间;实际上,行的到达时间可确定哪个窗口包含它。

例如,图 1 的中部 lastThree 窗口显示了 ROWTIME 为 11:15 的 YHOO 交易 (以及它前面的最后三个交易) 的到达。但是,对于 IBM (其 ROWTIME 也是 11:15 但一定晚于 YHOO 交易到达),此窗口将排除下一个交易。此 11:15 IBM 交易包含在“下一个”窗口中,与其前一项交易 11:15 YHOO 相同。

第二个示例:基于行和基于时间的零宽度窗口

图 2:零宽度窗口的示例显示了宽度为零的基于行和基于时间的窗口。基于行的窗口 lastZeroRows 仅包括当前行,因此始终正好包含一个行。请注意,ROWS CURRENT ROW 等效于 ROWS 0 PRECEDING。

基于时间的窗口 lastZeroSeconds 包含具有相同时间戳的所有行,这些行可能有多个。请注意,RANGE CURRENT ROW 等效于 RANGE INTERVAL '0' SECOND PRECEDING。

第三个示例:适用于基于行和基于时间的窗口的分区

图 3 显示了类似于图 1 中的窗口但包含 PARTITION BY 子句的窗口。对于基于时间的窗口 lastTwoSameTicker 和基于行的窗口 lastHourSameTicker,窗口包含符合窗口条件且具有与股票代码列相同的值的行。注意:分区在窗口之前计算。