当前位置:网站首页>基于开源流批一体数据同步引擎ChunJun数据还原—DDL解析模块的实战分享
基于开源流批一体数据同步引擎ChunJun数据还原—DDL解析模块的实战分享
2022-07-17 00:08:00 【数栈DTinsight】
原文链接:基于开源流批一体数据同步引擎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/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
原文来源:VX公众号“数栈研习社” 袋鼠云开源框架钉钉技术交流群(30537511),欢迎对大数据开源项目有兴趣的同学加入交流最新技术信息,开源项目库地址:https://github.com/DTStack
边栏推荐
- How does the website count the number of visitors? How to install and use 51la?
- Array Operations - judgment, de duplication, consolidation, expansion
- Today's codefarmer girl summed up the notes on the difference between the method of jQuery processing cache and the method of event delegation
- 02_ Data binding
- Solve the flashing of the menu switch at the bottom of applet customization
- 毒瘤 DDD
- 红日安全靶场3
- Uni block button multiple clicks button multiple clicks
- Common methods of JS array
- ES6 syntax -- Deconstruction assignment
猜你喜欢
随机推荐
Express中间件的分类及使用
JS higher order function filter/map/reduce
NFT 分化趋势已显,如何捕获价值?
面试官问:Redis 突然变慢了如何排查?
Redis 突然变慢了?
元宇宙会给万亿市场的音乐产业带来哪些变化?
Solve the flashing of the menu switch at the bottom of applet customization
MapReduce环境准备
红日安全靶场3
axs火爆,还有哪些打金游戏(上)
Use redis - Zset to make Leaderboard
TCP and UDP, TCP server and client, UDP server and client
binary search
情况说明和感想
软件漏洞分析入门(三)
Database programming (MySQL) of node, adding, deleting, modifying and querying
Countless times of stepping on the pit to install awvs
Uni app wechat official account (4) - address management page
解决scala无法对Native进行类的初始化
NFT数字藏品平台有哪些?哪些平台值得珍藏?








