Schema 一款簡單支持異構(gòu)數(shù)據(jù)源的SQL Driver

Schema 一款簡單支持異構(gòu)數(shù)據(jù)源的SQL Driver

1. 簡介

schema 項(xiàng)目是一個(gè)簡單的union-sql工程, 即用一套SQL可以同時(shí)訪問不同數(shù)據(jù)源的數(shù)據(jù),做到跨數(shù)據(jù)源JOIN等復(fù)雜操作,目前只簡單支持以下數(shù)據(jù)源

  • File(本地文件)
  • MySQL
  • HBase
  • Hive
  • ....

像HBase、Hive等其它數(shù)據(jù)源待慢慢支持,歡迎感興趣的小伙伴一起補(bǔ)充完善。

2. 主要技術(shù)點(diǎn)

本項(xiàng)目主要用到了Calcite 中avatica driver, 一個(gè)通用的JAVA jdbc Driver 框架,其主要特點(diǎn)在于可以自行適配不同的數(shù)據(jù)源, 比如文件、MySQL、Hbase 等不同數(shù)據(jù)源;

另一個(gè)技術(shù)點(diǎn)為Apache Calcite, 關(guān)于Apache Calcite 的作用及基本用法請參考我的簡書

執(zhí)行引擎是通過Calcite 內(nèi)置的CodeGen模塊動(dòng)態(tài)生成代碼并本地執(zhí)行,關(guān)于這一塊是一個(gè)大優(yōu)化方向,比如說可以用一些分布式執(zhí)行引擎如Flink 批、Spark引擎; 還可以進(jìn)一步優(yōu)化DAG 執(zhí)行引擎,采用MPP架構(gòu)方法,提高執(zhí)行效率

3. 如何使用

3.1 File 數(shù)據(jù)源

首先進(jìn)入file-shema的resource目錄下, 其中有json和csv兩個(gè)文件夾,表示支持json和csv兩種文件格式,每個(gè)目錄下有.csv(.json)和.schema文件分別表為數(shù)據(jù)文件及schema文件,具體內(nèi)容就不一一闡述,請參考其文件內(nèi)容

接著需要配置schema元數(shù)據(jù),請參考file.json文件內(nèi)容

然后可以運(yùn)行FileSelect 進(jìn)行測試

3.2 MySQL 數(shù)據(jù)源

首先需要一個(gè)可以訪問的MySQL數(shù)據(jù)庫, 接著在mysql-schema的resource下有一個(gè)mysql.json schema元數(shù)據(jù)文件, 配置正確的mysql數(shù)據(jù)庫相關(guān)配置即可

接著可以直接運(yùn)行MysqlSelect 即可

3.3 File 與MySQL結(jié)合

可以將File與MySQL數(shù)據(jù)源結(jié)合,做Join等關(guān)聯(lián)操作,詳情請參考test-schema中的FileAndMysqlScheamTest

4. 集成測試

你可以直接運(yùn)行:

mvn verify 

來起動(dòng)集成測試,該繼集成主要用來測試SQL執(zhí)行結(jié)果的正確性。全部的測試類都在test-schema的test目錄中,當(dāng)然你也可以直接運(yùn)行com.yuqi.schema.common.integrate
目錄下的類文件來進(jìn)行測試

5. TODO

目前本項(xiàng)目屬于剛開發(fā)階段,有很多不足之處:

  • 代碼規(guī)范
  • 測試
  • 功能
  • ...

以上不足之處會(huì)在后期慢慢改善,歡迎感興趣的小伙伴一起參與此項(xiàng)目

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容