暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

基于流批一体数据同步引擎ChunJun数据还原—DDL解析模块的实战分享

数栈研习社 2022-06-30
833


导读:

6月23日晚,袋鼠云数栈大数据开发专家渡劫为大家带来了「ChunJun数据还原-DDL解析模块实战 」的分享,我们将直播精华部分做了整理,带大家再次回顾内容,加深对技术细节的了解。


你能看到👇👇👇

▫ ChunJun-DDL解析模块介绍

▫ ChunJun-DDL解析模块实战

▫ Calcite在ChunJun-DDL中的实践应用


直播课件获取:

关注公众号“数栈研习社”,后台私信“ChunJun”获得直播课件


直播视频回看:

https://www.bilibili.com/video/BV1M3411w7S3?spm_id_from=333.999.0.0



演讲 渡劫

整理 花夏


上一期我们为大家介绍了《ChunJun支持异构数据源DDL转换与自动执行》,其中对Calcite解析DDL实战的内容做了简要介绍,本期我们将针对这一部分内容做详细分享。


 ChunJun-DDL解析模块介绍


在进行DDL实战演示前,我们先回顾一下数据还原及DDL解析模块的内容。

01

数据还原介绍

ChunJun支持mysql oracle postgresql sqlserver等数据源实时同步,但是同步之后的数据是以日志形式输出,数据还原在此基础上做到源数据的变动在目标表也发生对应变动,包含DML以及DDL的操作都会在目标表中执行对应的操作,保证源表和目标表schema一致、数据一致。


在ChunJun中数据还原还会有两种场景:手动执行和自动执行,他们之间的区别在于ChunJun是否能解析Source端DDL语句并转为下游语法对应语句,同时下游会执行对应的DDL。

02

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/video/BV1M3411w7S3?spm_id_from=333.999.0.0


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/video/BV1M3411w7S3?spm_id_from=333.999.0.0


往期推荐

▫ ChunJun支持异构数据源DDL转换与自动执行 

▫ 袋鼠云批流一体分布式同步引擎ChunJun的前世今生

▫ 基于开源大数据调度系统Taier的Web前端架构选型及技术实践

 ● ChunJun

https://github.com/DTStack/chunjun

https://gitee.com/dtstack_dev_0/chunjun

 ● Taier

https://github.com/DTStack/Taier

https://gitee.com/dtstack_dev_0/taier

 ● ChengYing

https://github.com/DTStack/chengying

https://gitee.com/dtstack_dev_0/chengying

 ● Molecule

https://github.com/DTStack/molecule

https://gitee.com/dtstack_dev_0/molecule


袋鼠云开源技术框架交流群

钉钉群|30537511

点击“阅读原文”,直达开源社区!

文章转载自数栈研习社,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论