Flink SQL 1.13新特性介绍
自从Flink 社区更新Flink1.13版本之后,博主作为一名Flink开发人员,对Flink SQL 1.13进行了探索,接下来将以四个部分对新增的内容进行展开介绍。
在整个Flink 1.13版本下,来自全球各地的开发人员共解决ISSUES 1000+,提交PR 200+,针对Flink Table/ SQL模块,解决ISSUES 400+ 。
其中Flink Table / SQL 新增的功能模块主要分为以下5大模块
![图片][7d58673fade9ded0fd424519b2912a3a.png]
Window TVF 包含四部分内容:
- Window TVF 语法
- 近实时累计计算
- Window 性能优化
- 多维数据分析
(1) Window TVF 语法
- 1.13前,是一个特殊的GroupWindowFunction;
- 1.13 用Table-Valued Function 进行了语法标准化;
- 完整的关系代数表达
- 输入是一个关系,输出也是一个关系
- 每个关系对应一个数据集
- 支持TUMBLE,HOP WINDOW
- SESSION WINDOW 预计1.14支持
- 新增CUMULATE WINDOW
(2) 近实时累计计算
案例: 每10分钟统计一次当天的累计用户UV
- 结果更精准
- 追数据时,曲线不会跳变
![图片][a3e955d3d3e175456d8428b15dd9b7ff.png]
(3) Window 性能优化
内存优化:通过内存预分配 ,缓存Window的数据,通过Window WaterMark触发计算。
切片优化:将Window切片,尽可能复用已计算结果,如hop window,cumulate window。
算子优化:window支持local-global 优化,同时支持 count(distinct)自动解热点优化。
迟到数据**:**支持迟到数据计算到后续分片,保证数据准确性。
- 开源 Benchmark (Nexmark)测试,普适性能有2X提升
- 在 count(distinct)场景会有更好的性能提升
(4) 多维数据分析
- GROUPING SETS
- ROLLUP
- CUBE
- 支持Window Top-N
2、FLIP-162: 时区和时间函数
时区和时间函数包含四部分内容:
- 时区问题分析
- 时间函数纠正
- 时间类型使用
- 夏令时支持
(1) 时区问题分析
1、处理时间窗口刚好晚8个小时
2、BIGINT转TIMESTAMP是否隐含时区信息
3、watermark + 8h 问题
4、SQL 时区问题
5、 CURRENT\_DATE函数问题
6、CURRENT\_DATE,CURRENT\_TIMESTAMP 时区问题
7、long 转 timestamp 怎么做
8、Hive分区提交的时区差问题
9、PROCTIME()函数语义问题
10、毫秒值如何声明成时间类型
时区问题原因:
- PROCTIME()应该考虑时区,但未考虑时区
- CURRENT_TIMESTAMP/CURRENT_TIME/CURRENT_DATE/NOW()未考虑时区
- TIMESTAMP类型不考虑时区,但用户希望是本地时区的时间
支持TIMESTAMP_LTZ类型
TIMESTAMP VS TIMESTAMP_LTZ
(2) 时间函数纠正
订正 PROCTIME() 函数
订正 CURRENT_TIMESTAMP / CURRENT_TIME / CURRENT_DATE / NOW() 函数
解决 processing time window 时区问题
订正 Streaming 和 Batch 模式下函数取值方式
Streaming 模式 per-record 计算,Batch 模式在 query-start 计算:
Stream 模式 Batch 模式都是per-record 计算:
- LOCALTIME
- LOCALTIMESTAMP
- CURRENT_DATE
- CURRENT_TIME
- CURRENT_TIMESTAMP
NOW()
CURRENT_ROW_TIMESTAMP()
- PROCIME()
(3) 时间类型使用
Event time 定义在 TIMESTAMP 列上
- 适用于源数据包含字符串的时间(如:2021-04-15 14:00:00)场景
Event time 定义在 TIMESTAMP_LTZ 列上
- 适用于源数据包含long值的时间(如:1621649473000)场景,以及夏令时时区用户
(4) 夏令时支持
Flink 支持在TIMESTAMP_LTZ列上定义时间属性,Flink SQL 在window处理时结合TIMESTAMP和 TIMESTAMP_LTZ, 优雅地支持了夏令时。
在洛杉矶时区,[2021-03-14 00:00,2021-03-14 00:04]窗口会收集 3 个小时的数据
在非夏令时区,[2021-03-14 00:00,2021-03-14 00:04]窗口会收集 4 个小时的数据
支持常用的 Hive DML,DQL语法
- SORT/CLUSTER/DISTRIBUTE BY
- Group By
- Join
- Union
- LATERAL VIEW
- Window Functions
- SubQueries
- CTE
- INSERT INTO dest schema
- Implicit type convesions
支持常用的 Hive DML,DQL语法
- Hive dialect 需要配合HiveCatalog 和 Hive Module 一起使用
- Hive Module 提供了Hive 所有内置函数,加载后可以直接访问
Hive dialect 支持创建/删除 Catalog函数
4、FLIP-163: 改进 SQL Client
SQL Client 支持指定文件初始化
- Deprecate YAML 文件,不推荐使用 YAML文件初始化
SQL Client 支持指定文件初始化
SQL Client 支持STATEMENT SET
5、FLIP-136: 增强DataStream 和 Table 的转换
- 支持DataStream 和Table 转换时传递 event Time 和 watermark
- 支持Changelog 数据流在Table 和 DataStream 间互相转换
Flink 1.13 版本包含:
- 支持Window TVF
- 时区和时间函数
- 提升Hive兼容性
- 改进SQL Client
- 增强DataStream转换
Flink 1.14 版本计划:
- 删除Legacy Planner
- 完善Window TVF
- 提升 Schema Handling
- 增强 Flink CDC
找各类大数据技术文章,就来微信公众号
<3分钟秒懂大数据>
随时更新互联网大数据组件内容
专为学习者提供技术博文
快和身边的小伙伴一起关注我们吧!
作者简介:在IT中穿梭旅行,秋招7offer,CSDN博客:https://blog.csdn.net/weixin\_38201936
还没有评论,来说两句吧...