聊聊FLINK-25631贡献
从入行做数据库开发,到2018年过渡到大数据开发,可以说我已经与sql朝夕相处了七八年了,经常惊讶于简单的语法就能产生复杂的操作,而且还能根据索引等统计信息自动优化,不禁很想实现自己的sql语法,却不知道这是怎么做到的,繁忙的工作、庞大的语法解析及优化的储备知识让我迟迟难以行动起来,但只要出现契机并敢于把握,这些困难都不算什么。
一个契机
我在捣鼓Flink发行版时,建了很多库和表,每次要看一个库的表时都要切到对应的库,切过去以后也只能在200多个表的库中肉眼寻找想要的表,记得在使用mysql时可以很方便地使用 `show tables from ... like ...` 语法完美解决这个问题,心想如果Flink也支持这个特性就好了,在经过短暂的思想斗争后终于下决心解决这个心头刺。然后我就开始研究Flink sql模块的语法解析部分,发现Calcite使用freemaker模板引擎,并在底层借助JavaCC做语法解析器,而定义新的sql语法必然要用到语法解析器,很快大致方案便定了下来:
- 背景知识巩固:语法解析原理,freemaker模板引擎,JavaCC
- 相关JavaCC和Calcite的开发代码可以在https://github.com/liyubin117/JavaTest代码仓库里看到
- 熟悉Flink sql与Calcite集成
- 参考社区`show columns`语法的实现,https://issues.apache.org/jira/browse/FLINK-22885
- 参考spark、mysql等流行引擎定义语法格式
- SHOW TABLES [ ( FROM | IN ) [catalog_name.]database_name ] [ [NOT] LIKE <sql_like_pattern> ]
- 开发Flink sql新语法
虽然事后看来这个方案理所当然,但其实中间遇到了很多坎,尤其是没有人可以请教。
行动起来
在经过半个多月的细节敲定和反复验证后,终于按方案完成了功能,然后美滋滋地编译打包进行验证,却发现结果与预料的不一样,不管`from`子句后面跟哪个库,都只会显示当前库的表,心里有些发虚,好消息`like`子句经验证是正常的,又壮了壮信心。我回头看了下所有的实现,都没发现问题,会不会是调用的底层接口有问题。我在实现时使用了内核提供的CatalogManager.listTables接口,一查果然有bug,只是由于之前Flink不支持我实现的这个功能,所以问题没暴露出来,很快我把这个问题修复后,向社区提了JIRA(https://issues.apache.org/jira/browse/FLINK-25369),社区的人很热情,很快就对我回复了,然后我提交了代码被合到了master分支。
FLINK-25369被社区合入后,重头戏来了,我终于向社区提了`show tables`高级语法特性(https://issues.apache.org/jira/browse/FLINK-25631),这是一个涉及近千行代码的大工程,虽然之前也做过一些贡献,但没贡献过这么复杂的功能,有些担心。云邪老师人很nice,很耐心地帮我review代码并提了些我之前未意识到的问题,高手确实是高手。
终于在2022年3月4号那天FLINK-25631被合进官方代码仓库,oh yeah!
聊聊FLINK-25631贡献的更多相关文章
- Flink资料(8) -- Flink代码贡献的指导及准则
本文翻译自Contributing Code ----------------------------------------- Apache Flink是由自愿的代码贡献者维护.优化及扩展的.Apa ...
- 聊聊flink的NetworkEnvironmentConfiguration
本文主要研究一下flink的NetworkEnvironmentConfiguration NetworkEnvironmentConfiguration flink-1.7.2/flink-runt ...
- 聊聊flink的CsvTableSource
序 本文主要研究一下flink的CsvTableSource TableSource flink-table_2.11-1.7.1-sources.jar!/org/apache/flink/tabl ...
- 聊聊flink Table的groupBy操作
本文主要研究一下flink Table的groupBy操作 Table.groupBy flink-table_2.11-1.7.0-sources.jar!/org/apache/flink/tab ...
- 聊聊flink的AsyncWaitOperator
序本文主要研究一下flink的AsyncWaitOperator AsyncWaitOperatorflink-streaming-java_2.11-1.7.0-sources.jar!/org/a ...
- 聊聊flink的Async I/O
// This example implements the asynchronous request and callback with Futures that have the // inter ...
- 聊聊flink的log.file配置
本文主要研究一下flink的log.file配置 log4j.properties flink-release-1.6.2/flink-dist/src/main/flink-bin/conf/log ...
- [case49]聊聊flink的checkpoint配置
序 本文主要研究下flink的checkpoint配置 实例 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecut ...
- 聊聊flink的BlobStoreService
序 本文主要研究一下flink的BlobStoreService BlobView flink-release-1.7.2/flink-runtime/src/main/java/org/apache ...
- 终于等到你!阿里正式向 Apache Flink 贡献 Blink 源码
摘要: 如同我们去年12月在 Flink Forward China 峰会所约,阿里巴巴内部 Flink 版本 Blink 将于 2019 年 1 月底正式开源.今天,我们终于等到了这一刻. 阿里妹导 ...
随机推荐
- TIME_WAIT 优化注意事项
不同时开启tcp_timestamps和tcp_tw_recycle的场景描述 FULL NAT下 FULL NAT 在client请求VIP 时,不仅替换了package 的dst ip,还替换了 ...
- 前馈控制+PID
参考来源: 北京交通大学 硕士学位论文 基于脉冲串控制的含位置反馈和前馈补偿的位置控制算法的研究 赵旺升
- HTML5摇一摇(上)—如何判断设备摇动
刚刚过去的一年里基于微信的H5营销可谓是十分火爆,通过转发朋友圈带来的病毒式传播效果相信大家都不太陌生吧,刚好最近农历新年将至,我就拿一个"摇签"的小例子来谈一谈HTML5中如何调 ...
- 在linux环境下安装VMtools(成功)
想在主机和虚拟机之间互相复制文件吗? 想更加方便的联系主机和虚拟机吗? 就安装VMtools吧 其实,在linux下安装VMtools 是非常的简单,只要简单地几步就行了! 第一步:打开虚拟机,在左 ...
- H5本地存储:sessionStorage和localStorage
作者:心叶时间:2018-05-01 18:30 H5提供了二种非常好用的本地存储方法:sessionStorage和localStorage,下面分别介绍一下: 1.sessionStorage:保 ...
- visio2019专业版激活码
这里面有 : 最新Project2019+ Visio2019专业增强版和专业版永久激活密钥分享 (weibo.com)
- 【Android开发】监听图库数据库的变化
步骤一: 保存图片或者删除之前,初始化ContentObserver ScreenshotContentObserver mScreenObserver = new ScreenshotContent ...
- Java 将Map按Value值降序排列
1 /** 2 * 将集合按照降序排列-FLOAT 3 * @param nowPartTwoData 4 * @return 5 */ 6 private static List<Map.En ...
- 《头号玩家》AI电影调研报告(二)
四. 涉及前沿技术及与现实的交互 1.VR技术 在影片中,斯皮尔伯格用他认为未来的VR虚拟技术为我们创造了众多精彩的画面,令人佩服其对科技的预见性.其中好多的装备特别引人注目,部分也在现实中存在:VR ...
- windows下右键新建md文件
windows下右键新建md文件 打开注册表 win键+R打开运行对话框, 输入regedit, 打开注册表编辑器. 修改注册表 在磁盘的任意位置新建一个文件, 后缀名为reg, 并写入一下内容 [H ...