Flink SQL 批处理使用HOP详解

Flink SQL 批处理使用HOP详解

介绍

Flink SQL中分组窗口函数中有一个HOP(time_attr, hop interval 滑动间隔, fixed duration 窗口时间),适合的场景基本是每隔多长时间统计一次某个时间段内的指标,例如,统计每个用户过去1分钟(窗口时间)的单击次数,每30秒(滑动间隔)更新1次。在流式计算中比较容易理解,但是批处理使用这个函数就会让人摸不着头脑。下面通过一个例子来解释。

表结构及数据

Flink SQL 批处理使用HOP详解_第1张图片

SQL

    INSERT INTO print
    SELECT a, sum(b) as b_sum
      FROM orders
     GROUP BY a, HOP(rowtime, INTERVAL '1' HOUR, INTERVAL '24' HOUR)
     ORDER BY a

执行结果及解释

+I(a,55)  2021-03-26 09:00:00 ~ 2021-03-26 09:59:59   +55 第一个窗口开始
+I(a,55)
+I(a,55)
+I(a,55)
+I(a,65)  2021-03-26 13:00:00 ~ 2021-03-26 13:59:59   +10 第二个窗口开始(2021-03-26 13:44:50)
+I(a,65)
+I(a,65)
+I(a,65)
+I(a,65)
+I(a,65)
+I(a,65)
+I(a,65)
+I(a,65)
+I(a,65)
+I(a,66)  2021-03-26 23:00:00 ~ 2021-03-26 23:59:59   +1 第三个窗口开始(2021-03-26 23:45:54)
+I(a,66)
+I(a,66)
+I(a,66)
+I(a,66)
+I(a,66)
+I(a,66)
+I(a,66)
+I(a,66)
+I(a,66)
+I(a,110) 2021-03-27 09:00:00 ~ 2021-03-27 09:59:59   -55 第一个窗口关闭 +99 第四个窗口开始(2021-03-27 09:12:00)
+I(a,110)
+I(a,110)
+I(a,110)
+I(a,100) 2021-03-27 13:00:00 ~ 2021-03-27 13:59:59   -10 第二个窗口结束
+I(a,110) 2021-03-27 14:00:00 ~ 2021-03-27 14:59:59   +10 第五个窗口开始(2021-03-27 14:00:00)
+I(a,110)
+I(a,110)
+I(a,110)
+I(a,110)
+I(a,110)
+I(a,110)
+I(a,110)
+I(a,110)
+I(a,109)  2021-03-27 23:00:00 ~ 2021-03-27 23:59:59   -1 第三个窗口结束
+I(a,109)
+I(a,109)
+I(a,109)
+I(a,109)
+I(a,109)
+I(a,109)
+I(a,109)
+I(a,109)
+I(a,109)
+I(a,10)   2021-03-28 09:00:00 ~ 2021-03-28 09:59:59  -99 第四个窗口结束
+I(a,10)
+I(a,10)
+I(a,10)
+I(a,10)

滑动间隔小于窗口时间,在批处理中,先按时间排序,从时间最早的那条记录开始算时间,把同一个滑动间隔内的记录先计算一次(不输出),然后直到到达窗口时间算一个窗口结束,在此时间流逝的期间,按照滑动间隔滑动,遇到GROUP BY同组的新记录就计算,同时新记录的窗口开始,也按滑动间隔滑动,直到到达窗口时间算新纪录的一个窗口结束。每滑动一次都输出一次。

你可能感兴趣的:(Flink,flink)