2

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

 1 year ago
source link: https://blog.51cto.com/u_15137832/5432436
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

原创

数栈DTinsight 2022-06-30 19:53:38 博主文章分类:数栈前沿技术分享 ©著作权

文章标签 sql 数据 数据源 文章分类 Hadoop 大数据 阅读数172

原文链接:​ ​基于开源流批一体数据同步引擎 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
基于开源流批一体数据同步引擎 ChunJun 数据还原 —DDL 解析模块的实战分享_sql

对于 SQL 转换这一部分,我们增加了一个 DDL Convent 接口,这个接口提供了 SQL 转为公共实体类以及公共实体类转回 SQL 的功能,而具体的转换将由对应的数据源插件按照各自语法进行实现。

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

DDL Data 是我们抽取的一个公共层数据的顶层抽象类,由于各个数据源的语法规则不同,因此我们需要抽取一个公共层,由这个公共层进行不同数据源之间数据的转换。

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

为了解析 SQL 并转为公共层数据,我们引入了 Calcite 进行 SQL 的解析,不同的数据源按照对应的语法会有对应的 SQL 解析器,通过这个解析器进行 SQL 的解析,将 SQL 语句转为对应的 SQLNode,再将 SQLNode 里的信息转为中间层。

这样我们就解决了数据还原的异构数据源场景中的 DDL 语法不一致的问题。

二、ChunJun-DDL 解析模块实战

上一章节我们介绍了一些基本概念,接下来我们就来为大家实际演示一下如何操作。

在 ChunJun-SQL module 下,执行 mvn clean compile -DskipTest,maven 会打包出基于 Calcite 实现的解析器,各个数据源 DDL 解析模块会生成对应的解析器进行 SQL 的解析。

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

生成的解析器支持解析的 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 文件

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

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​

  • 打赏
  • 收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK