流计算 Oceanus 时间窗口函数 - SQL 开发指南
VIEW CONTENTS
摘要: 窗口函数是一种特殊的函数,它并不在SELECT的投影列表中使用,而是在GROUPBY子句中使用。流计算Oceanus支持三种类型的窗口函数:TUMBLE、HOP、SESSION。TUMBLEWINDO ...
点击领取2000元阿里云代金券,付款抵现金用,云服务器69元/年限时抢>>>    点击咨询成为阿里云VIP客户享永久折扣>>>
点击领取2860元腾讯云代金券,付款抵现金用云服务器88元/年限时抢>>>    点击成为腾讯云VIP客户享永久折扣优惠>>>
点击进入华为云最新优惠活动现场>>>    点击成为华为云VIP客户享永久折扣优惠>>>

窗口函数是一种特殊的函数,它并不在 SELECT 的投影列表中使用,而是在 GROUP BY 子句中使用。流计算 Oceanus 支持三种类型的窗口函数:TUMBLE、HOP、SESSION。

TUMBLE WINDOW

TUMBLE 窗口是一个个相连但不重叠的固定周期的窗口。

语法

TUMBLE(time_attr, interval)

  • 其中 interval 的用法可参见 时间相关函数。
  • 第一个参数表示时间戳字段,表示每条记录被处理时的时间戳。
注意:

  • 如果在 Event Time 时间模式下(使用 WATERMARK FOR 语句定义了时间戳字段),那么 TUMBLE、HOP、SESSION 窗口函数的第一个参数必须为该字段。
  • 如果在 Processing Time 时间模式下,则 TUMBLE、HOP、SESSION 窗口函数的第一个参数必须为 proctime() 函数生成的计算列,下文用 PROCTIME 举例,请在实际作业中替换为实际的列名。

示例

TUMBLE(rowtime, INTERVAL '1' DAY)

其中 rowtime 是数据源中的时间戳字段。

TUMBLE(PROCTIME, INTERVAL '2' HOUR)

其中 PROCTIME 是自动生成的记录被处理时的时间戳。

TUMBLE 窗口的示意图:

HOP WINDOW

HOP WINDOW 是一种滑动窗口,它保持窗口大小不变,每次滑动指定的时间周期,因而允许窗口之间的相互重叠。

语法

HOP(time_attr, sliding_interval, window_size_interval)

示例

HOP(rowtime, INTERVAL '1' HOUR, INTERVAL '1' DAY)

表示一个窗口大小为1天,滑动周期为1小时的 HOP 窗口。

HOP 窗口的示意图:

SESSION WINDOW

Session Window 并非以长度来划分窗口,而是以非活跃时间来划分。例如超过30分钟不活跃(没有新数据),则之前的窗口结束,下一个来到的数据将会形成一个新窗口。

语法

SESSION(time_attr, interval)

示例

SESSION(rowtime, INTERVAL '12' HOUR)

SESSION 窗口的示意图:

另外,这三种窗口都有对应的辅助函数。以 TUMBLE 窗口为例(HOP、SESSION 也一样,只是前缀不同),有如下辅助函数:

  • TUMBLE_START:表示 TUMBLE 窗口的起始值(包含)。示例如下:
    SELECT user,
    TUMBLE_START(rowtime, INTERVAL '1' DAY) as wStart, 
    SUM(amount) FROM Orders 
    GROUP BY TUMBLE(rowtime, INTERVAL '1' DAY), user
  • TUMBLE_END:表示 TUMBLE 窗口的末端界限(不包含,只能用于 SELECT 后的列,不能用作 JOIN 或 GROUP 以及 OVER 条件。若需要,请根据当前的时间模式(Event Time 或 Processing Time)分别使用下面的 TUMBLE_ROWTIME 或 TUMBLE_PROCTIME)。
    • TUMBLE_ROWTIME:表示 TUMBLE 窗口的末端界限(包含,可用作 JOIN 或 GROUP 以及 OVER 条件,Event Time 时间模式下使用)。示例如下:
      SELECT user,
      TUMBLE_START(rowtime, INTERVAL '12' HOUR) AS sStart,
      TUMBLE_ROWTIME(rowtime, INTERVAL '12' HOUR) AS snd,
      SUM(amount)
      FROM Orders
      GROUP BY TUMBLE(rowtime, INTERVAL '12' HOUR), user
    • TUMBLE_PROCTIME:表示 TUMBLE 窗口的末端界限(包含,可用作 JOIN 或 GROUP 以及 OVER 条件,Processing Time 时间模式下使用)。示例如下:
      SELECT user,
      TUMBLE_START(PROCTIME, INTERVAL '12' HOUR) AS sStart,
      TUMBLE_PROCTIME(PROCTIME, INTERVAL '12' HOUR) AS snd,
      SUM(amount)
      FROM Orders
      GROUP BY TUMBLE(PROCTIME, INTERVAL '12' HOUR), user

路过

雷人

握手

鲜花

鸡蛋

相关阅读

2021-7-7 14:43| 发布者: xtyly| 查看: 69| 评论: 0



在线客服(工作时间:9:00-22:00)
400-600-6565

内容导航

微信客服

Copyright   ©2015-2019  云服务器社区  Powered by©Discuz!  技术支持:尊托网络     ( 湘ICP备15009499号-1 )