首页 > 数据库 >且慢!听说你线上环境准备选型 Elasticsearch SQL 了?

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

时间:2022-10-18 22:33:21浏览次数:71  
标签:SQL 选型 elasticsearch https sql Elasticsearch 你线


1、由两个线上问题说开去

  • 问题1:用 Elasticsearch 做宽表的报表查询,我们打算用 jdbc 的方式访问,方便开发(使用sql),这种方式还是用JAVA封装的方法好。有没有坑?
  • 问题2:Elasticsearch 可以用脚本写sql ,像执行hive脚本一样吗?

2、问题解读

  • 问题 1 涉及选型问题,我们会条分缕析解读。
  • 问题 2 涉及 Elasticsearch 是否支持 SQL 功能。

3、Elasticsearch SQL 到底指什么?

一句话:能像关系型数据库如 Mysql 中使用 SQL 方式一样方便的实现 Elasticsearch 增、删、改、查(尤其是检索、聚合)等的操作。

3.1 Elasticsearch SQL 演进史

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

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

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

有图有真相。

且慢!听说你线上环境准备选型 Elasticsearch SQL 了?_数据库_02

且慢!听说你线上环境准备选型 Elasticsearch SQL 了?_数据库_03

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

截图中的 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 授权才可以使用。

JDBC client requires a Platinum subscription. Please ensure that you have a Trial or Platinum license installed on your cluster before proceeding.

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

​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,你的企业场景使用了吗?”

且慢!听说你线上环境准备选型 Elasticsearch SQL 了?_数据库_06

PS:问卷题目并不严谨(如:选项内容比较随意,单选并不合理),但群众的眼光是雪亮的,问卷结果会给选型提供非常有价值的参考。

5、小结

关注铭毅天下公众号的读者都会发现,我们一般会把官方文档、官方网站或者官方博客的地址、源码截图放到最醒目的位置。

目的是想知会广大读者:官方文档是官方角度的权威介绍,相比其他论坛、博客要权威。也希望大家养成阅读官方文档的习惯。

声明一下,本文并没有说:不让使用 Elasticsearch SQL,请不要过分解读。

本文从选型视角,列举了Elasticsearch SQL 发展历程、优点、缺点、180 + 企业使用调研,目的是解答文章开头的线上问题。如果能让广大读者的 Elasticsearch SQL 选型少走不必要的弯路,我会非常欣慰。

欢迎大家留言说一下自己 Elasticsearch SQL 使用情况。

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



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


  • 中国最大的 Elastic 非官方公众号

标签:SQL,选型,elasticsearch,https,sql,Elasticsearch,你线
From: https://blog.51cto.com/elasticsearch/5768293

相关文章

  • 干货 | Elasticsearch 冷热集群架构实战
    Elasticsearch最少必要知识实战教程直播回放0、题记Elasticsearch实战数据量级少的时候,单节点就能玩的很6,但是随着数据量的增长,多节点分布式横向扩展集群是大势所趋。之前......
  • 干货 | Elasticsearch基础但非常有用的功能之二:模板
    Elasticsearch最少必要知识实战教程直播回放1、引言业务场景1:数据量非常大,需要进行索引生命周期管理,按日期划分索引,要求多个索引的Mapping一致,每次手动创建或者脚本创......
  • 探究 | Elasticsearch集群规模和容量规划的底层逻辑
    Elasticsearch最少必要知识实战教程直播回放0、引言实战中经常遇到的问题:问题1:请问下大家是如何评估集群的规模?比如数据量达到百万,千万,亿万,分别需要什么级别的集群,这要......
  • 干货 | Elasticsearch 索引设计实战指南
    题记随着Elastic的上市,ELKStack不仅在BAT的大公司得到长足的发展,而且在各个中小公司都得到非常广泛的应用,甚至连“婚庆网站”都开始使用Elasticsearch了。随之而来......
  • 实战 | Elasticsearch自定义评分的N种方法
    Elasticsearch最少必要知识实战教程直播回放1、期望Elasticsearch搜索结果更准确,不可回避的三个问题问题1:用户真正的需求是什么? 如果不能获得用户的搜索意图,搜索的准确......
  • Elasticsearch实战 | 如何从数千万手机号中识别出情侣号?
    1、问题描述您好,请教个问题。我现在有2千多万的手机号码信息保存在es里。5个分片,3个节点。现在的需求是将后八位相同的号码匹配到一起,重新放到一个index里。组成情侣号。方......
  • 干货 | Elasticsearch开发人员最佳实战指南
    Elasticsearch最少必要知识实战教程直播回放题记几个月以来,我一直在记录自己开发Elasticsearch应用程序的最佳实践。本文梳理的内容试图传达Java的某些思想,我相信其同样......
  • Elasticsearch能检索出来,但不能正确高亮怎么办?
    1、问题引出微信群里的线上实战问题:诸位大哥,es中:keyword类型的字段进行高亮查询,值为123asd456,查询sd4,高亮结果是em123asd456em有没有办法只对我查询的sd4高亮?明明查询......
  • Elasticsearch 聚合数据结果不精确,怎么破?
    1、实战开发遇到聚合问题请教一个问题,ES在聚合的时候发生了一个奇怪的现象聚合的语句里面size设置为10和大于10导致聚合的数量不一致,这个size不就是返回的条数吗?会影响统计......
  • Elasticsearch 预处理没有奇技淫巧,请先用好这一招!
    手敲脑图串讲Elasticsearch核心知识点1、上问题1.1线上实战问题1——字符串切分es可以根据_id字符串切分,再聚合统计吗比如:数据1、_id=C12345数据2、_id=C12456数......