系列文章目录
Flink/Blink 原理漫谈(一)时间,watermark详解
Flink/Blink 原理漫谈(二)流表对偶性和distinct详解
Flink/Blink 原理漫谈(三)state 有状态计算机制 详解
Flink/Blink 原理漫谈(五)流式计算的持续查询实现 详解
Flink/Blink 原理漫谈(六)容错机制(fault tolerance)详解
文章目录
window机制
Blink-1.x版本的window内容
有一些比较基本的group by概念我觉得不需要陈述了,主要需要介绍的是两个类型:group by window和over window。
Group by window中包含滚动窗口,滑动窗口,会话窗口;over window包含rows over window和range over window。
在开始介绍窗口之前,我想先进行一个总结:group by window都是仅仅支持时间窗口的(数据时间戳进行划分窗口),而over window支持时间窗口和计数窗口(按数据条数进行划分窗口),这个划分方式决定了在一些实际的业务问题上面,会产生很严重的影响,例如根据心跳日志实时计算上线人数和下线人数;如果使用group by window,flink自身的retract机制就会导致结果和预期不符,但是使用over window,问题就迎刃而解了。
Group by window
Tumbling window 滑动窗口
特点:左闭右开,窗口长度固定,无重叠。
窗口语法:
SELECT
[gk],
[TUMBLE_START(timeCol, size)],
[TUMBLE_END(timeCol, size)],
agg1(col1),
...
aggn(colN)
FROM Tab1
GROUP BY [gk], TUMBLE(timeCol, size)
• [gk] 决定了流是Keyed还是/Non-Keyed;
• TUMBLE_START - 窗口开始时间;
• TUMBLE_END - 窗口结束时间;
• timeCol - 是流表中表示时间字段;
• size - 表示窗口的大小,如 秒,分钟,小时,天;
真实示例:
SELECT
region,
TUMBLE_START(accessTime, INTERVAL '2' MINUTE)