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

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

视频回放:点击这里

ChunJun开源项目地址:githubgitee 喜欢我们的项目给我们点个 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

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

  1. 带你玩转Flink流批一体分布式实时处理引擎

    摘要:Apache Flink是为分布式.高性能的流处理应用程序打造的开源流处理框架. 本文分享自华为云社区<[云驻共创]手把手教你玩转Flink流批一体分布式实时处理引擎>,作者: 萌兔 ...

  2. 基于TreeSoft实现异构数据同步

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路.     TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...

  3. 基于TreeSoft实现mysql、oracle、sql server的数据同步

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护需求,TreeSoft推出了数据同步,数据处理等丰富功能 . TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之间架起沟通的桥 ...

  4. Nunchuck.js - 轻松实现多个设备的数据同步

    Nunchuck.js 是对用于移动设备上的浏览器应用程序的控制库,通过浏览器轻松实现多设备数据同步.他们提供了一个库,很容易使开发人员能够整合移动浏览器控件到桌面的基于浏览器的 JavaScript ...

  5. SQLite与MySQL、SQLServer等异构数据库之间的数据同步

    SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎,实现了SQLite与SQLite数据库之间以及SQLite与异构数据库(Oracle.MySQL.SQLServer)之间的增量 ...

  6. Oracle数据同步交换

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路.     TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...

  7. SQL Server数据同步交换

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路.     TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...

  8. MySQL数据同步交换

    一.为了解决数据同步汇聚,数据分发,数据转换,数据维护等需求,TreeSoft将复杂的网状的同步链路变成了星型数据链路.     TreeSoft作为中间传输载体负责连接各种数据源,为各种异构数据库之 ...

  9. Linux实战教学笔记21:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...

  10. rsync (windows 服务端,linux客户端)将windows上的数据同步到linux服务器,反之也可

    一:总体概述. 1.windows上面首先装CW_rsync_Server.4.1.0_installer,安装时要输入的用户名密码要记住哦!接下来就是找到rsyncd.conf进入配置细节 2.li ...

随机推荐

  1. 查看Unity3D中默认的变量名与按键的映射

    博客地址:https://www.cnblogs.com/zylyehuo/ 选择 Edit/Project Settings/Input Manager 点击 Axes 即可查看对应变量名与按键的映 ...

  2. BUUCTF---RSA3(共模攻击)

    1.题目 RSA已知e1,e2,c1,c2 2.知识 共模攻击使用相同N作为加密的模数,如果监听者获知了c1,c2的密文,那么监听者便不需要d1,d2即可解出明文m 3.解题 按照思路编写代码解题 点 ...

  3. [源码系列:手写spring] IOC第三节:Bean实例化策略InstantiationStrategy

    主要内容 在第二节中AbstractAutowireCapableBeanFactory类中使用class.newInstance()的方式创建实例,仅适用于无参构造器.  大家可以测试一下,将第二节 ...

  4. 【Linux】3.4 用户管理

    用户管理 1. 基本用户管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. 用户的账号一方面可以帮助 ...

  5. 关于TFDMemtable的使用场景

    TFDMemtable是FireDAC框架的内存数据集组件.也是处理数据最快速的组件.简单说是把数据快储在内存中进行处理,因此其数据是和数据源是隔离的. 使用场景: 1.把一些少量的经常会使用的数据放 ...

  6. Excel百万数据如何快速导入?

    前言 今天要讨论一个让无数人抓狂的话题:如何高效导入百万级Excel数据. 去年有家公司找到我,他们的电商系统遇到一个致命问题:每天需要导入20万条商品数据,但一执行就卡死,最长耗时超过3小时. 更魔 ...

  7. gRPC与RPC的差异

    在微服务架构日益流行的今天,远程过程调用(RPC)技术成为连接各个服务的重要桥梁.本文将详细比较传统RPC与谷歌开发的gRPC框架,通过具体示例展示它们在请求处理.数据格式.性能等方面的差异. 基本概 ...

  8. kette介绍-Step之Table output

    表输入(Table output)介绍: Table output步骤常被用于将转换中的行集从内存持久化到数据库,对转换而言是 行集被拿出去的感觉,故名为输出.可以限制提交记录数量和指定插入的目标表 ...

  9. Next App Router 模式下,如何同步服务端 Redux 初始状态?

    大家的阅读是我发帖的动力,本文首发于我的博客:deerblog.gu-nami.com/,欢迎大家来玩,转载请注明出处喵. 前言 Next.js 是一个广受欢迎的 React 服务端渲染(Server ...

  10. servlet 解决中文乱码

    目录 1 get请求request乱码 2 post请求request乱码 3 response乱码 4 使用例子 1 get请求request乱码 在Tomcat7及以下版本,客户端以UTF-8的编 ...