一、方案的由来
Elasticsearch是搜索的王者,其强大的DSL不让SQL,但缺少SQL的关键特性,如Join。ES的策略是紧紧拥抱Hadoop/Hive,Spark,有个ES-hadoop方案。Hadoop本身就很笨重,这和轻快的ES是背道而驰的。ES的主要方向目前还在搜索上,SQL也不是它的主要关注点。所以,可预见的一段时间内,SQL on ES只能通过开发或集成第三方软件来完成,如通过Presto或Drill的插件来实现。我们已经测试了Presto Elasticsearch Connector。我们认为,基于插件的方案难以充分发挥ES的性能优势。因此,我们提出了基于Calcite Elasticsearch实现的SQL ON ES方案设想。
二、方案论述
1、Apache Calcite
Apache Calcite是面向Hadoop新的查询引擎,它提供了标准的SQL语言、多种查询优化和连接各种数据源的能力,除此之外,Calcite还提供了OLAP和流处理的查询引擎。正是有了这些诸多特性,Calcite项目在Hadoop中越来越引入注目,并被众多项目集成。
Calcite之前的名称叫做optiq,optiq起初在Hive项目中,为Hive提供基于成本模型的优化,即CBO(Cost Based Optimizatio)。2014年5月optiq独立出来,成为Apache社区的孵化项目,2014年9月正式更名为Calcite。Calcite项目的创建者是Julian Hyde,他在数据平台上有非常多的工作经历,曾经是Oracle、 Broadbase公司SQL引擎的主要开发者、SQLStream公司的创始人和主架构师、Pentaho BI套件中OLAP部分的架构师和主要开发者。现在他在Hortonworks公司负责Calcite项目,其工作经历对Calcite项目有很大的帮助。除了Hortonworks,该项目的代码提交者还有MapR、Salesforce等公司,并且还在不断壮大。
Calcite的目标是“one size fits all(一种方案适应所有需求场景),希望能为不同计算平台和数据源提供统一的查询引擎,以类似传统数据库的访问方式(SQL和高级查询优化)来访问Hadoop上的数据。
Apache Calcite具有以下几个技术特性:
- 支持标准SQL语言;
- 独立于编程语言和数据源,可以支持不同的前端和后端;
- 支持关系代数、可定制的逻辑规划规则和基于成本模型优化的查询引擎;
- 持物化视图(materialized view)的管理(创建、丢弃、持久化和自动识别);
- 基于物化视图的Lattice和Tile机制,以应用于OLAP分析;
- 支持对流数据的查询。
Adapters
A schema adapter allows Calcite to read particular kind of data, presenting the data as tables within a schema.Cassandra adapter (calcite-cassandra)
CSV adapter (example/csv)
JDBC adapter (part of calcite-core)
MongoDB adapter (calcite-mongodb)
Spark adapter (calcite-spark)
Splunk adapter (calcite-splunk)
Eclipse Memory Analyzer (MAT) adapter (mat-calcite-plugin)
calcite-elasticsearch
https://github.com/LeeBeomYong/calcite-elasticsearch
2、elasticsearch-sql
https://github.com/NLPchina/elasticsearch-sql
3、SQL on Elasticsearch
参考Calcite-elasticsearch、elasticsearch-sql,利用Elasticsearch插件机制,实现SQL on Elasticsearch方案。这样,在ES上实现了SQL,有以下几点优势:
简化了系统架构;
减少了数据在ES和Presto之间的传输时间;
充分利用了ES的高性能、Calcite强大的SQL和内存列数据能力;
提供了带有Join能力的ES JDBC Driver
1、验证步骤:
ES插件开发验证;
Calcite-elasticsearch Adapter验证;
SQL on Elasticsearch验证;
with Join ES JDBC Driver验证
四、里程碑事件
Apache Calcite 1.8.0 / 2016-06-13 Permalink
这个版本加入了Elasticsearch 和 Druid 适配器,支持ES 2.3.3版本。这进一步增加了SQL on ES方案的可行性。
方案很美好,是否可行需要验证,验证结果,敬请等待。