Flink入门教程(四)——窗口(二)

欢迎关注公众号——《数据三分钟》

一线大厂的师兄师姐结合自己的工作实践,将数据知识浅显道来,每天三分钟,助你成为数据达人。还有面试指导和内推机会。

 

        上一节将到标准开窗函数在实时流计算中的实现,这一节我们来讲讲window aggregate。我把这两块都放在窗口来写,因为他们本质都是一种计算的触发机制,即在满足一定情况下去启动需要的计算。不同的是window agg被定义在group by语句中,它定义出一个key,其实就是一个窗口的范围了。window agg还可以形象地看成一个一个按照一定规则排列的桶(bucket),而每一个桶就是一个window,就是一个计算单元。

        window agg一般可以分为滑动窗口、滚动窗口、会话窗口。

1、滚动窗口(Tumble window)

        滚动窗口彼此之间没有重叠,且严丝合缝,窗口与窗口之间连续分布。假设划定一个2分钟的滚动窗口,那么窗口的分布大致如下:

        从上图可以看出每隔2分钟会触发一次滚动窗口。在window agg聚合中,我们通常要考虑数据的乱序和延迟问题,因此一般会搭配watermark(水印)去使用(后续章节会详细描述),假设我们需要计算每个商品每分钟的曝光次数,允许有3秒钟的数据延迟,代码如下:

CREATE TABLE tumble_window(
  item_id varchar,
  item_url varchar,
  ts timeStamp,
  WATERMARK wk FOR ts as withOffset(ts, 3000) 
) with (
  type='kafka',
  ...
);

CREATE TABLE tumble_result(
  window_start TIMESTAMP,
  window_end TIMESTAMP,
  item_id VARCHAR,
  exps BIGINT
) with (
  type='hbase'
);

INSERT INTO tumble_result
SELECT 
  start_time(ts, INTERVAL '1' MINUTE),
  end_time(ts, INTERVAL '1' MINUTE),
  item_id, 
  COUNT(item_url) as cnt
FROM tumble_window
GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE), item_id

测试数据:

item_id

item_url

ts

item_1

http://taobao.com/123456

2021-06-18 12:00:00

item_1

淘宝网 - 淘!我喜欢

2021-06-18 12:00:48

item_1

淘宝网 - 淘!我喜欢

2021-06-18 12:00:58

item_1

淘宝网 - 淘!我喜欢

2021-06-18 12:01:01

item_1

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值