内容简要:
一、实时计算Flink版SQL简介
二、实时计算Flink版SQL上手示例
三、开发常见问题和解法
实时计算Flink版SQL简介
(一)关于实时计算Flink版SQL
实时计算Flink版选择了SQL这种声明式语言作为顶层API,比较稳定,也方便用户使用。Flink SQL具备流批统一的特性,给用户统一的开发体验,并且语义一致。另外,Flink SQL能够自动优化,包括屏蔽流计算里面State的复杂性,也提供了自动优化的Plan,并且还集成了AutoPilot自动调优的功能。Flink SQL的应用场景也比较广泛,包括数据集成、实时报表、实时风控,还有在线机器学习等场景。
(二)基本操作
在基本操作上,可以看到SQL的语法和标准SQL非常类似。示例中包括了基本的SELECT、FILTER操作。,可以使用内置函数,如日期的格式化,也可以使用自定义函数,比如示例中的汇率转换就是一个用户自定义函数,在平台上注册后就可以直接使用。
(三)维表 Lookup Join
在实际的数据处理过程中,维表的Lookup Join也是一个比较常见的例子。
这里展示的是一个维表INNER JOIN示例。
例子中显示的SOURCE表是一个实时变化的订单信息表,它通过INNER JOIN去关联维表信息,这里标黄高亮的就是维表JOIN的语法,可以看到它和传统的批处理有一个写法上的差异,多了FOR SYSTEM_TIME AS OF这个子句来标明它是一个维表JOIN的操作。SOURCE表每来一条订单消息,它都会触发维表算子,去做一次对维表信息的查询,所以把它叫做一个Lookup Join。
(四)Window Aggregation
Window Aggregation(窗口聚合)操作也是常见的操作,Flink SQL中内置支持了几种常用的Window类型,比如Tumble Window,Session Window,Hop Window,还有新引入的Cumulate Window。
Tumble
Tumble Window可以理解成固定大小的时间窗口,也叫滚窗,比如说5分钟、10分钟或者1个小时的固定间隔的窗口,窗口之间没有重叠。
Session
Session Window(会话窗口) 定义了一个连续事件的范围,窗口定义中的一个参数叫做Session Gap,表示两条数据的间隔如果超过定义的时长,那么前一个Window就结束了,同时生成了一个新的窗口。
Hop
Hop Window不同于滚动窗口的窗口不重叠,滑动窗口的窗口之间可以重叠。滑动窗口有两个参数:size 和 slide。size 为窗口的大小,slide 为每次滑动的步长。如果slide < size,则窗口会重叠,同一条数据可能会被分配到多个窗口;如果 slide = size,则等同于 Tumble Window。如果 slide > size,窗口之间没有重叠且有间隙。
Cumulate
Cumulate Window(累积窗口),是Flink社区1.13版本里新引入的,可以对比 Hop Window来理解,区别是从Window Start开始不断去累积。示例中Window 1、Window 2、Window 3是在不断地增长的。它有一个最大的窗口长度,比如我们定义Window Size是一天,然后Step步长是1个小时,那么它会在一天中的每个小时产生累积到当前小时的聚合结果。
看一个具体的Window聚合处理示例。
如上图所示,比如说需要进行每5分钟单个用户的点击数统计。
源数据是用户的点击日志,我们期望算出每5分钟单个用户的点击总数, SQL 中使用的是社区最新的 WindowTVF语法,