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)目