当前位置:网站首页>基于开源流批一体数据同步引擎 ChunJun 数据还原 —DDL 解析模块的实战分享
基于开源流批一体数据同步引擎 ChunJun 数据还原 —DDL 解析模块的实战分享
2022-07-01 12:36:00 【51CTO】
原文链接: 基于开源流批一体数据同步引擎 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
袋鼠云开源框架钉钉技术交流qun(30537511),欢迎对大数据开源项目有兴趣的同学加入交流最新技术信息,开源项目库地址: https://github.com/DTStack
边栏推荐
- BIM and safety in road maintenance-buildSmart Spain
- 腾讯黎巍:深耕“监管科技”,护航数字经济行稳致远
- Mobile note application
- CPI tutorial - asynchronous interface creation and use
- Tencent security and KPMG released a regulatory technology white paper to analyze the "3+3" hot application scenarios
- Interpretation of hard threshold function [easy to understand]
- Sort out relevant contents of ansible
- Digital signal processing -- Design of linear phase (Ⅱ, Ⅳ) FIR filter (2)
- Friends day 2022
- Ipv6-6to4 experiment
猜你喜欢

第十四章 信号(四)- 多进程任务示例

双链表有关操作
![[20220605] Literature Translation -- visualization in virtual reality: a systematic review](/img/11/6c42957186bf530e8f9d4025a40197.png)
[20220605] Literature Translation -- visualization in virtual reality: a systematic review

logstash报错:Cannot reload pipeline, because the existing pipeline is not reloadable
![[some notes]](/img/91/7657f90b50f012736579b1585b4ade.jpg)
[some notes]

手机便签应用

Mobile note application

Share several tools for designing exquisite circuit diagrams

被锡膏坑了一把

ROS2 Foxy depthai_ros教程
随机推荐
Sort out relevant contents of ansible
微信模拟地理位置_伪装微信地理位置
localtime居然不可重入,踩坑了
Arm GIC (V) how arm TrustZone supports security interrupt analysis notes.
Operations related to sequence table
栈的应用——括号匹配问题
Stack-------
[Yu Yue education] financial management reference materials of Ningbo University of Finance and Economics
【邂逅Django】——(二)数据库配置
二叉树的链式存储
Using burpsuite to capture app packages
下半年还有很多事要做
Switch basic experiment
Compile and debug net6 source code
【历史上的今天】7 月 1 日:分时系统之父诞生;支付宝推出条码支付;世界上第一支电视广告
ANSI/UL 94 VTM薄质材料垂直燃烧测试
VS Code 设置单击打开新文件窗口,不覆盖前一个窗口
ASP.NET Core 6 从入门到企业级实战开发应用技术汇总
Application of stack -- bracket matching problem
[brain opening] west tide and going to the world series