Flink SQL 1.13新特性介绍

£神魔★判官ぃ 2022-10-09 02:48 680阅读 0赞

自从Flink 社区更新Flink1.13版本之后,博主作为一名Flink开发人员,对Flink SQL 1.13进行了探索,接下来将以四个部分对新增的内容进行展开介绍。

20210623102313168.png

在整个Flink 1.13版本下,来自全球各地的开发人员共解决ISSUES 1000+,提交PR 200+,针对Flink Table/ SQL模块,解决ISSUES 400+ 。

图片

其中Flink Table / SQL 新增的功能模块主要分为以下5大模块

  1. ![图片][7d58673fade9ded0fd424519b2912a3a.png]

20210623102405311.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

图片

  • 结果更精准
  • 追数据时,曲线不会跳变

20210623101707497.gif图片

  1. ![图片][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. 1、处理时间窗口刚好晚8个小时
  2. 2BIGINTTIMESTAMP是否隐含时区信息
  3. 3watermark + 8h 问题
  4. 4SQL 时区问题
  5. 5 CURRENT\_DATE函数问题
  6. 6CURRENT\_DATE,CURRENT\_TIMESTAMP 时区问题
  7. 7long timestamp 怎么做
  8. 8Hive分区提交的时区差问题
  9. 9PROCTIME()函数语义问题
  10. 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 模式下函数取值方式

  1. 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 个小时的数据

20210623102703762.png

支持常用的 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 间互相转换

图片

20210623102838411.png

Flink 1.13 版本包含:

  • 支持Window TVF
  • 时区和时间函数
  • 提升Hive兼容性
  • 改进SQL Client
  • 增强DataStream转换

Flink 1.14 版本计划:

  • 删除Legacy Planner
  • 完善Window TVF
  • 提升 Schema Handling
  • 增强 Flink CDC

20210623102920194.png

找各类大数据技术文章,就来微信公众号

<3分钟秒懂大数据>

随时更新互联网大数据组件内容

专为学习者提供技术博文

快和身边的小伙伴一起关注我们吧!

作者简介:在IT中穿梭旅行,秋招7offer,CSDN博客:https://blog.csdn.net/weixin\_38201936

图片

发表评论

表情:
评论列表 (有 0 条评论,680人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Flink 1.14 特性预览

    简介: 一文了解 Flink 1.14 版本新特性及最新进展 > 本文由社区志愿者陈政羽整理,内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日线上 Flink M

    相关 Java9特性介绍

    1. Java 平台级模块系统 Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。这时候就得面

    相关 ECMAScript 6特性介绍

    箭头函数 箭头函数使用 `=>` 语法来简化函数,在语句结构上和C\、Java 8 和 CoffeeScript类似,支持表达式和函数体。 `。` =>\`操作符左边为输