原文鏈接:基於開源流批一體數據同步引擎ChunJun數據還原—DDL解析模塊的實戰分享 課件獲取:關註公眾號** “數棧研習社”,後臺私信 “ChunJun”**獲得直播課件 視頻回放:點擊這裡 ChunJun開源項目地址:github 丨 gitee 喜歡我們的項目給我們點個 STAR!STAR! ...
原文鏈接:基於開源流批一體數據同步引擎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