话说天下大势,合久必分, 分久必合。

——罗贯中大大

SQL的世界也是如此。最初ANSI仅仅对SQL提出了一种标准,于是各个数据存储厂商都自己定制了专门的SQL语法。也因为此,在工作中,我们常常会遇到这样的场景:

小明丨刚刚参加工作

第一个任务便是查询从没接触过的Hive中的数据。前辈说,不要担心,你直接用查MySQL的SQL语句查询就好。小明颤颤巍巍写下了第一个SQL查询语句,确实能跑。但是随着业务复杂度增加,SQL的复杂度也随之提升,他渐渐发现Hive和MySQL的SQL语法并不完全一样,平时查询需要区别对待,不停切换。他想知道,有没有一种SQL可以支持业内主流的数据存储引擎?

小红丨参加工作2年

已经学会使用MySQL、Hive、Oracle等不同存储引擎的SQL语句查询数据。这时,上司说要引入Elasticsearch。她发现这个数据存储引擎并不能通过SQL查询,而是需要编写复杂的json查询。渐渐地,她发现类似的存储引擎越来越多,Druid、Redis、Mongo、HBase等,并且每一种都需要采取不同的方式查询数据,分析一个业务场景所需要切换的查询方式也越来越多。她想知道,可不可以使用SQL语言查询No-SQL乃至New-SQL的数据存储?

所以嘞,Quicksql(简称QSQL)诞生啦!

是什么?

Quicksql是一个更简单,更安全,更快速的跨数据源统一SQL查询引擎。它帮助用户减少在使用不同数据引擎时需要的学习成本和切换成本,忽略不同数据引擎底层存储和数据查询方式的差异,使用户仅需要关注查询的业务逻辑和数据本身。

能做什么?

1、统一SQL语法:提供统一SQL语言,支持不同结构化数据存储查询,方便用户学习。

2、多数据存储引擎查询:提供SQL查询No-SQL\New-SQL等数据存储引擎,方便使用。

3、数据联邦:支持跨数据源查询,例如MySQL join Elasticsearch union Hive。

4、方便扩展:分层灵活,Quicksql可以很方便的扩展多种数据源(Druid、Mongo等),扩展多种计算引擎(Spark、Flink等)。

怎么用?

Quicksql现在提供三种对外服务方式:命令行,API和JDBC连接。

根据Quicksql的Github主页相关说明,用户可以很容易的进行Quicksql的部署。部署完成后,Quicksql提供了脚本模式,支持使用类似 “qsql -e [SQL]” 这样的命令进行数据查询。

为方便开发者用户使用,Quicksql提供了一套API方便开发程序调用。与Spark、Storm等现有的引擎类似,Quicksql API在使用中需要先定义环境参数(任务名,执行引擎,查询最大返回条数等),然后进行SQL的查询和任务的提交。关于API的用法详情可以参考Quicksql example。

Quicksql还实现了JDBC的接口,用户可以像连接MySQL一样通过JDBC方式连接Quicksql进行数据查询。

怎么实现的?

Quicksql基于Apache Calcite提供的多数据引擎SQL语义适配功能,基于ANSI发布的SQL 2003标准和用户的使用习惯上,重新定义并扩展部分SQL语义,对用户提供了统一的SQL语言。在内部,Quicksql会根据用户所查询的SQL语句,在原语义的基础上,进行解析转化等操作,最终根据数据引擎特性将用户的查询语义完整的转化为数据引擎可执行的SQL语句。Quicksql还拥有智能选择功能,可以根据该SQL的引擎特性决定最快速最高效的数据查询方式,例如,当Quicksql分析得出查询语句是一个混合查询,它就会自动选择启动集群模式(默认是Spark)进行数据处理。

想知道更多?

这里就是开源主页啦:

还有我们的QQ交流群和微信群~~

1月12号,在360将举办360大数据技术开放日,邀请360、快手、人人车多位大数据专家,现场分享数据存储、数据分析、分布式调度等方面的技术实战经验。

支持Quicksql,并加star,可在1月12号大数据技术开放日当天活动现场凭截图领取360定制猪年礼品一份!

界世的你当不

只作你的肩膀

技术干货|一手资讯|精彩活动

查看项目详情