简述
业务员与开发人员经常口述 能不能帮我导点 xxx数据,隔几个小时又来能不能给我导 xxx数据。反复接收到这样的任务心里一万个CNM。那能不能智能点呢,如果业务人员会SQL,你就会想能不能写个能识别SQL语句的功能让她想导什么就导什么。如,文件太大,她想用SQL查看抽样信息。在比如,内存redis想看内存的数据信息。还有hbase敲命令好复杂,我能不能自己写个SQL语法解析器来转换成命令执行呢。还可能 关系型数据库与nosql数据库使用SQL关联查询。如果自己写个简单的SQL语法解析器还好,关联查询复杂嵌套各种函数相结合的SQL自己解析可能是恶魔。俗话说不要重复造轮子,把自己的逻辑思想核心代码全部投入业务中去。calcite的出现可以解决该问题。
介绍
开发人员使用SQL查询数据,相信大家都执行过相关操作,大家之前可能查询的都是DBMS, 玩大数据的应该都使用过phoenix、hive、spark on sql 、elasticsearch on sql 等相关的SQL操作。但是如果想 玩redis sql相信大家就苦恼了,没有开源支持。
apache calcite是一个行业标准的SQL解析器,对编写的SQL智能优化,任何数据任何地方都可以集成SQL功能,这就是它的强大。
背景
官方解释
Apache Calcite是一个动态的数据管理框架,它包含许多构成典型数据库管理系统的部分,但省略了一些关键功能:数据存储,数据处理的算法以及存储元数据的存储库。
工具
废话不多说,这里先编写个最简单的hello world,让大家小试牛刀有个大概的了解。
官网链接:https://calcite.apache.org/
想要深入的可以研究官方例子:https://github.com/apache/calcite/tree/master/example/csv/src/main/java/org/apache/calcite/adapter/csv
需要工具,IDEA,JDK8,maven
项目目录
说明
- Client.java # 客户端
- CustomEnumerator.java # 数据输出类
- CustomSchema # 数据库映射类
- CustomScheamFactory # 数据库工厂类
- CustomTable # 数据表类
- data.csv # 数据文件
- model.json # 映射文件,也可以通过字符串传入
- pom.xml
代码依赖如图
先上代码
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0<