相比于 Elasticsearch,关系型数据库的 SQL 查询用的人更多,大家也习惯用 SQL 进行数据的增删改查操作。
加上 Elasticsearch DSL 多少有一定的学习成本,所以在 Elasticsearch 早期 1.X——6.X版本发展过程中,听到最多声音是:
Elasticsearch 什么时候支持 SQL?
类关系型数据库中的 SQL 如何转换成 Elasticsearch 中的 DSL?
国内的 NLPChina 团队2015年左右开源的 elasticsearch-sql 插件非常火,star 达 6.2K。但跟进到7.9.3 版本之后,elasticsearch-sql 已被 DEPRECATED(原因未知)。
地址:https://github.com/NLPchina/elasticsearch-sql/
实际上:Elasticsearch 在2018年6月15日前后发布的 6.3 版本中已支持 SQL。
可以看一下 SQL 功能刚发布后我写的文章:
抢先 | 支持sql的Elasticsearch6.3全景概览
3.2 Elastic 官方文档介绍 Elasticsearch SQL
“Elasticsearch 具有高速、灵活、可扩展等特点,能够满足您的数据需求,而且其还可以使用 SQL。使用传统数据库句法来解锁非传统性能,例如在 PB 量级的数据中进行全文本搜索,并实时获得结果。”
https://www.elastic.co/cn/what-is/elasticsearch-sql
3.3 Elasticsearch SQL 使用概览
有图有真相。
截图中的 SQL 和 Mysql中的用法几乎完全一致。
SELECT * FROM library ORDER BY page_count DESC
3.4 Elasticsearch SQL 的优点
极易上手
类关系型数据库 SQL 查询,会 SQL 操作 Elasticsearch 不费劲。
无需第三方依赖
高版本7.X已支持(7.1+版本 xpack基础功能免费),早期版本还需要安装 xpack 插件,现在都不需要。
4、Elasticsearch SQL 选型还需要考虑哪些因素?
4.1 Elasticsearch SQL 尚存在不足
多表关联支持不足
Elasticsearch 无法完美无缝的实现 Mysql 的多表关联(Join)功能, 原因:受限于 Elasticsearch 数据模型(宽表、Nested类型、Join类型)。
嵌套 select 支持不足
举例:如下 MySQL 查询语句在 Elasticsearch 执行的话,结果可能达不到预期。
SELECT COUNT(subquery.item_id) total
FROM (
SELECT item_id, COUNT(item_id) nofbs, CAST(timestamp AS DATE) date, user_email
FROM select_download_user
GROUP BY item_id, CAST(timestamp AS DATE), user_email
) subquery;
https://www.elastic.co/cn/blog/an-introduction-to-elasticsearch-sql-with-practical-examples-part-2
4.2 Elasticsearch JDBC / ODBC 仍未免费
尽管 REST 方式可以使用,但绝大多数Java、Python 客户端用户更习惯使用 JDBC 方式连接 Elasticsearch。
参见官方文档的描述,JDBC 和 ODBC 都需要白金版付费购买 Liscene 授权才可以使用。
https://www.elastic.co/cn/downloads/jdbc-client
https://www.elastic.co/cn/subscriptions
4.3 Elasticsearch SQL 国内公司使用现状调查
正所谓:“他山之石,可以攻玉”、“知己知彼、百战百胜”。
如下是累计近 2000人 + 的 Elasticsearch 学习微信群(共 181 人参与)的随机调研结果,仅供选型参考。
问卷题目:“Elasticsearch 6.3 以后推出的SQL,你的企业场景使用了吗?”
PS:问卷题目并不严谨(如:选项内容比较随意,单选并不合理),但群众的眼光是雪亮的,问卷结果会给选型提供非常有价值的参考。
5、小结
关注铭毅天下公众号的读者都会发现,我们一般会把官方文档、官方网站或者官方博客的地址、源码截图放到最醒目的位置。
目的是想知会广大读者:官方文档是官方角度的权威介绍,相比其他论坛、博客要权威。也希望大家养成阅读官方文档的习惯。
声明一下,本文并没有说:不让使用 Elasticsearch SQL,请不要过分解读。
本文从选型视角,列举了Elasticsearch SQL 发展历程、优点、缺点、180 + 企业使用调研,目的是解答文章开头的线上问题。如果能让广大读者的 Elasticsearch SQL 选型少走不必要的弯路,我会非常欣慰。
欢迎大家留言说一下自己 Elasticsearch SQL 使用情况。
不当之处,欢迎指正交流。