原文連結: 基於開源流批一體資料同步引擎 ChunJun 資料還原 —DDL 解析模組的實戰分享
課件獲取:關注公眾號 “數棧研習社” ,後臺私信 “ChunJun” 獲得直播課件
影片回放:
ChunJun 開源專案地址: 丨 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 站直播回顧地址:
三、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 站直播回顧地址:
袋鼠雲開源框架釘釘技術交流群(30537511),歡迎對大資料開源專案有興趣的同學加入交流最新技術資訊,開源專案庫地址: