窗口示例 - Amazon Kinesis Data Analytics

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

窗口示例

以下示例显示了示例输入数据集、多个窗口的定义以及这些窗口在 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 窗口显示了 YHOO 与 ROWTIME 11:15 的交易(以及之前的最后三笔交易)的到来。但是,该窗口不包括IBM的下一笔交易,其ROWTIME也是 11:15,但其到达时间一定比YHOO交易晚。这次 11:15 的IBM交易包含在 “下一步” 窗口中,其前身YHOO的11:15 交易也包含在 “下一步” 窗口中。

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

图 2:零宽度窗口的示例显示了零宽度的基于行和基于时间的窗口。基于行的窗口仅 lastZeroRows 包含当前行,因此始终只包含一行。请注意,ROWS 当前行等同于 0 之前的行。

基于时间的窗口 lastZeroSeconds 包含所有具有相同时间戳的行,其中可能有多行。请注意,RANGE CURRENT ROW 等同于前一秒的范围间隔 '0'。

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

图 3 显示的窗口与图 1 中的窗口类似,但带有 PARTION BY 子句。对于基于时间的窗口 lastTwoSame Tick lastHourSame er 和基于行的窗口 Ticker,该窗口包含符合窗口条件且具有相同值的行。注意:分区是在窗口之前评估的。