基於開源流批一體資料同步引擎ChunJun資料還原—DDL解析模組的實戰分享

語言: CN / TW / HK

原文連結:基於開源流批一體資料同步引擎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

file

對於SQL轉換這一部分,我們增加了一個DDL Convent介面,這個介面提供了SQL轉為公共實體類以及公共實體類轉回SQL的功能,而具體的轉換將由對應的資料來源外掛按照各自語法進行實現。

file

DDL Data是我們抽取的一個公共層資料的頂層抽象類,由於各個資料來源的語法規則不同,因此我們需要抽取一個公共層,由這個公共層進行不同資料來源之間資料的轉換。

file

為了解析SQL並轉為公共層資料,我們引入了Calcite進行SQL的解析,不同的資料來源按照對應的語法會有對應的SQL解析器,通過這個解析器進行SQL的解析,將SQL語句轉為對應的SQLNode,再將SQLNode裡的資訊轉為中間層。

這樣我們就解決了資料還原的異構資料來源場景中的DDL語法不一致的問題。

二、ChunJun-DDL解析模組實戰

上一章節我們介紹了一些基本概念,接下來我們就來為大家實際演示一下如何操作。

- 第一步

在ChunJun-SQL module下,執行 mvn clean compile -DskipTest,maven會打包出基於Calcite實現的解析器,各個資料來源DDL解析模組會生成對應的解析器進行SQL的解析。

file

- 第二步

生成的解析器支援解析的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檔案

file

Calcite使用Javacc作為語法解析器,並且使用Freemarker作為模板引擎,在編譯的時候,Freemarker會將配置檔案、模板語法檔案、附加模板檔案整體生成最終的語法檔案,並通過JavaCC編譯,形成Calcite的語法檔案。

- 具體演示

具體的實戰演示過程在公眾號上不做回顧,各位社群小夥伴們可前往B站檢視直播回顧影片。

B站直播回顧地址:

https://www.bilibili.com/video/BV1M3411w7S3?spm_id_from=333.999.0.0

袋鼠雲開源框架釘釘技術交流群(30537511),歡迎對大資料開源專案有興趣的同學加入交流最新技術資訊,開源專案庫地址:https://github.com/DTStack

「其他文章」