深入解读 Flink SQL 1.13功能点,不入坑血亏!

发布于 2021-09-11 20:39

每天1次,打卡阅读

更快更全面获取大数据技术博客

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

1、Flink SQL 1.13 概述

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

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

2、核心feature解读

1、FLIP-145: 支持Window TVF

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

  • 结果更精准

  • 追数据时,曲线不会跳变

(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 计算:
    • LOCALTIME

    • LOCALTIMESTAMP

    • CURRENT_DATE

    • CURRENT_TIME

    • CURRENT_TIMESTAMP

    • NOW()

    Stream 模式 Batch 模式都是per-record 计算:
    • 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 个小时的数据

3、Flink SQL 重要改进

3、FLIP-152: 提升Hive语法兼容性

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

4、总结

Flink 1.13 版本包含:
  •   支持Window TVF

  •   时区和时间函数

  •   提升Hive兼容性

  •   改进SQL Client

  •   增强DataStream转换

Flink 1.14 版本计划:

  • 删除Legacy Planner

  • 完善Window TVF

  • 提升 Schema Handling

  • 增强 Flink CDC

End

找各类大数据技术文章,就来

<3分钟秒懂大数据>

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

专为学习者提供技术博文

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

本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。

相关素材