/schema

A SQL driver framework that supports multiple data source

Primary LanguageJava

Schema 一款简单支持异构数据源的SQL Driver

1. 简介

schema 项目是一个简单的union-sql工程, 即用一套SQL可以同时访问不同数据源的数据,做到跨数据源JOIN等复杂操作,目前只简单支持以下数据源

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

像HBase、Hive等其它数据源待慢慢支持,欢迎感兴趣的小伙伴一起补充完善。

2. 主要技术点

本项目主要用到了Calcite 中avatica driver, 一个通用的JAVA jdbc Driver 框架,其主要特点在于可以自行适配不同的数据源, 比如文件、MySQL、Hbase 等不同数据源;

另一个技术点为Apache Calcite, 关于Apache Calcite 的作用及基本用法请参考我的简书

执行引擎是通过Calcite 内置的CodeGen模块动态生成代码并本地执行,关于这一块是一个大优化方向,比如说可以用一些分布式执行引擎如Flink 批、Spark引擎; 还可以进一步优化DAG 执行引擎,采用MPP架构方法,提高执行效率

3. 如何使用

3.1 File 数据源

首先进入file-shema的resource目录下, 其中有json和csv两个文件夹,表示支持json和csv两种文件格式,每个目录下有.csv(.json)和.schema文件分别表为数据文件及schema文件,具体内容就不一一阐述,请参考其文件内容

接着需要配置schema元数据,请参考file.json文件内容

然后可以运行FileSelect 进行测试

3.2 MySQL 数据源

首先需要一个可以访问的MySQL数据库, 接着在mysql-schema的resource下有一个mysql.json schema元数据文件, 配置正确的mysql数据库相关配置即可

接着可以直接运行MysqlSelect 即可

注意: 如果要跑MySQL数据源时,一定要配置好MySQL数据库连接相关配置

3.3 File 与MySQL结合

可以将File与MySQL数据源结合,做Join等关联操作,详情请参考test-schema中的FileAndMysqlScheamTest

4. 集成测试

注意 : MySQL schema依赖本地MySQL, 如果要测试MySQL,请事先配置好MySQL, 详情请参考集成测试

你可以直接运行:

mvn verify 

来起动集成测试,该继集成主要用来测试SQL执行结果的正确性。全部的测试类都在test-schema的test目录中,当然你也可以直接运行com.yuqi.schema.common.integrate 目录下的类文件来进行测试

5. TODO

目前本项目属于刚开发阶段,有很多不足之处:

  • 代码规范
  • 测试
  • 功能
  • ...

以上不足之处会在后期慢慢改善,欢迎感兴趣的小伙伴一起参与此项目