且慢!听说你线上环境准备选型 Elasticsearch SQL 了?

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 1、由两个线上问题说开去问题1:用 Elasticsearch 做宽表的报表查询,我们打算用 jdbc 的方式访问,方便开发(使用sql),这种方式还是用JAVA封装的方法好。有没有坑?问题2:Elasticsearch 可以用脚本写sql ,像执行hive脚本一样吗?2、问题解读问题 1 涉及选型问题,我们会条分缕析解读。问题 2 涉及 Elasticsearch 是否支持 SQL 功能。3、Elasticsearch SQL 到底指什么?一句话:能像关系型数据库如 Mysql 中使用 SQL 方式一样方便的实现 Elasticsearch 增、删、改、查(尤其是检索、

相比于 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(原因未知)。

image.png

地址: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 使用概览

有图有真相。

image.png

image.png

截图中的 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


https://stackoverflow.com/questions/67166581/elasticsearch-sql-count-function-does-not-work-with-subquery-on-elasticsearch


4.2 Elasticsearch JDBC / ODBC 仍未免费

尽管 REST 方式可以使用,但绝大多数Java、Python 客户端用户更习惯使用 JDBC 方式连接 Elasticsearch。


参见官方文档的描述,JDBC 和 ODBC 都需要白金版付费购买 Liscene 授权才可以使用。

image.png

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 使用情况。


不当之处,欢迎指正交流。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
SQL命令行退出操作指南:轻松掌握不同数据库环境下的退出技巧
在数据库管理与开发过程中,经常需要通过SQL命令行工具(如MySQL的mysql客户端、PostgreSQL的psql、SQL Server的sqlcmd等)与数据库进行交互
323 59
|
7月前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
259 1
|
3月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
55 0
|
2月前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
37 0
|
3月前
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
467 1
|
4月前
|
Linux 数据库 数据安全/隐私保护
|
5月前
|
SQL 存储 NoSQL
. NoSQL和SQL的区别、使用场景与选型比较
【7月更文挑战第30天】. NoSQL和SQL的区别、使用场景与选型比较
82 15
|
7月前
|
SQL 自然语言处理 数据挖掘
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
NL2SQL技术方案系列(1):NL2API、NL2SQL技术路径选择;LLM选型与Prompt工程技巧,揭秘项目落地优化之道
|
7月前
|
SQL 关系型数据库 数据库
实时计算 Flink版产品使用合集之将数据写入Elasticsearch时,若Elasticsearch中的字段类型为date,对应的SQL类型应该是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。