原文链接:基于开源流批一体数据同步引擎ChunJun数据还原—DDL解析模块的实战分享
课件获取:关注公众号 “数栈研习社”,后盾私信 “ChunJun”取得直播课件
视频回放:点击这里
ChunJun开源我的项目地址:github 丨 gitee 喜爱咱们的我的项目给咱们点个 STAR!STAR!!STAR!!!(重要的事件说三遍)
一、ChunJun-DDL解析模块介绍
上一期咱们为大家介绍了《ChunJun反对异构数据源DDL转换与主动执行》,其中对Calcite解析DDL实战的内容做了简要介绍,本期咱们将针对这一部分内容做具体分享。在进行DDL实战演示前,咱们先回顾一下数据还原及DDL解析模块的内容。
1、数据还原介绍
ChunJun反对mysql oracle postgresql sqlserver等数据源实时同步,然而同步之后的数据是以日志模式输入,数据还原在此基础上做到源数据的变动在指标表也产生对应变动,蕴含DML以及DDL的操作都会在指标表中执行对应的操作,保障源表和指标表schema统一、数据统一。
在ChunJun中数据还原还会有两种场景:手动执行和主动执行,他们之间的区别在于ChunJun是否能解析Source端DDL语句并转为上游语法对应语句,同时上游会执行对应的DDL。
2、DDL解析模块介绍
因为不同的数据源之间的语法不同,在数据还原的异构数据源场景中执行DDL是一个难题,如何将Source的DDL语句转换为合乎Sink语法的DDL语句,成为困扰许多人的问题,ChunJun也面临着这样一个窘境,为了解决这个状况,ChunJun引入了DDL解析模块解决此问题。
DDL解析模块次要解决2个问题
- 解析Source的SQL,将其转为ChunJun抽取进去的公共实体类
- 将公共实体类再依照Sink端的语法规定转为对应的SQL
对于SQL转换这一部分,咱们减少了一个DDL Convent接口,这个接口提供了SQL转为公共实体类以及公共实体类转回SQL的性能,而具体的转换将由对应的数据源插件依照各自语法进行实现。
DDL Data是咱们抽取的一个公共层数据的顶层抽象类,因为各个数据源的语法规定不同,因而咱们须要抽取一个公共层,由这个公共层进行不同数据源之间数据的转换。
为了解析SQL并转为公共层数据,咱们引入了Calcite进行SQL的解析,不同的数据源依照对应的语法会有对应的SQL解析器,通过这个解析器进行SQL的解析,将SQL语句转为对应的SQLNode,再将SQLNode里的信息转为中间层。
这样咱们就解决了数据还原的异构数据源场景中的DDL语法不统一的问题。
二、ChunJun-DDL解析模块实战
上一章节咱们介绍了一些基本概念,接下来咱们就来为大家理论演示一下如何操作。
- 第一步
在ChunJun-SQL module下,执行 mvn clean compile -DskipTest,maven会打包出基于Calcite实现的解析器,各个数据源DDL解析模块会生成对应的解析器进行SQL的解析。
- 第二步
生成的解析器反对解析的SQL语法能够看下对应模块的test模块。
- 具体演示
具体的实战演示过程在公众号上不做回顾,各位社区小伙伴们可返回B站查看直播回顾视频。
B站直播回顾地址:
https://www.bilibili.com/vide...
三、Calcite在ChunJun-DDL中的实际利用
咱们通过引入Calcite进行SQL的解析,上一章节咱们对ChunJun-DDL解析模块进行了实战演示,接下来咱们为大家分享Calcite在ChunJun-DDL中的实际利用。
- 第一步
Mavne依赖,具体可见ChunJun-DDL-MySQL Module的pom配置。
- 第二步
Main工程目录下增加对应的Codegen文件夹,外面次要由config.fmpp(Calcite的配置文件) 和FTL语法文件组成。
- 第三步
依照数据源语法编写FTL文件
Calcite应用Javacc作为语法解析器,并且应用Freemarker作为模板引擎,在编译的时候,Freemarker会将配置文件、模板语法文件、附加模板文件整体生成最终的语法文件,并通过JavaCC编译,造成Calcite的语法文件。
- 具体演示
具体的实战演示过程在公众号上不做回顾,各位社区小伙伴们可返回B站查看直播回顾视频。
B站直播回顾地址:
https://www.bilibili.com/vide...
袋鼠云开源框架钉钉技术交换qun(30537511),欢送对大数据开源我的项目有趣味的同学退出交换最新技术信息,开源我的项目库地址:https://github.com/DTStack