ElasticSearch(十一)— Elasticsearch中的SQL语句

news2025/1/23 11:55:32

一、总概

Elasticsearch 在 Basic 授权中支持以 SQL 语句的形式检索文档,SQL 语句在执行时会被翻译为 DSL 执行。从语法的角度来看,Elastisearch 中的 SQL 语句与RDBMS 中的 SQL 语句基本一致, 所以对于有数据库编程基础的人来说大大降低了使用 Elaticsearch 的学习成本。

Elasticsearch 提供了多种执行SQL 语句的方法,可使用类似_search 样的 REST接口执行也可以通过命令行执行。它甚至还提供了 JDBC 和 ODBC 驱动来执行 SQL语句,但 JDBC 和 ODBC需要付费。

二、 sql 接口

在早期版本中,Elasticsearch 执行 SQL 的 REST 接口为_xpack/sql, 但在版本7 以后这个接口已经被废止而推荐使用_sql 接口。例如:

POST _sql?format=txt
{
	"query": "select DestCountry, OriginCountry,AvgTicketPrice from kibana_sample_data_flights where Carrier = 'Kibana Airlines' order by AvgTicketPrice desc"
}

在示例中,_sql接口通过query参数接收SQL语句,而SQL语句也包含有select、from、where、 orderby 等子句。_sql 接口的 URL 请求参数 format 定义了返回结果格式。比如在示例中定义了返回结果格式为 txt。除了 txt 以外,_sqI 接口还支持 csv、 json、tsv、yaml 等等格式。
示例中的请求会将所有航空公同为 Kibana Airines 的航班文档检索出来,并以文本表格的形式返回。
在这里插入图片描述
对于总量比较大的 SOL 查询,sql 接口还支持以游标的形式实现分页。当_sql接口的请求参数中添加了 fetch_size 参数,sql 接口在返回结来时就会根据fetch_size 参数设置的大小返回相应的条数,并在返回结果中添加游标标识。具体来说,当请求_sql 接口时设置的 forma 为 json 时,返回结果中会包含 cursor属性;而其他情况下则会在响应中添加Cursor报头。例如还是执行示例中的SOL ,但是加入分页支持:

POST _sql?format=json
{"query":"select DestCountry, OriginCountry,AvgTicketPrice from kibana_sample_data_flights where Carrier = 'Kibana Airlines' order by AvgTicketPrice desc", 
"fetch_size":10
}

在示例的请求中,为了能够在返回结果中直接看到 cursor 值,我们将 format设置为 json,可以看到:
在这里插入图片描述

POST _sql?format=json
{ "cursor":"k8OvAwFaAXN4RkdsdVkyeDFaR1ZmWTI5dWRHVjRkRjkxZFdsa0RY
RjFaWEo1UVc1a1JtVjBZMmdCRkdWV2JWZDNXRWxDTVZKMlowOXpha2R4U0RVM0F
BQUFBQUFCYk5jV1dIZ3daMFZWVld4UlNtbElSVXBTWVdaRFN6RmlVUT09/w8DA
WYLRGVzdENvdW50cnkBC0Rlc3RDb3VudHJ5AQdrZXl3b3JkAQAAAWYNT3JpZ2luQ29
1bnRyeQENT3JpZ2luQ291bnRyeQEHa2V5d29yZAEAAAFmDkF2Z1RpY2tldFByaWNlA
Q5BdmdUaWNrZXRQcmljZQEFZmxvYXQAAAABBw=="
}

在上面的请求中,参数 cursor 就是第一个请求返回结果中的 cursor 值,反复执行请求,Elasticsearch 就会将第一次请求的全部内容以每次 10 个的数量全部迭代出来。在请求完所有数据后,应该使用_sql/close 接口将游标关闭以释放资源。

POST _sql/close
{ "cursor":"k8OvAwFaAXN4RkdsdVkyeDFaR1ZmWTI5dWRHVjRkRjkxZFdsa0RY
RjFaWEo1UVc1a1JtVjBZMmdCRkdWV2JWZDNXRWxDTVZKMlowOXpha2R4U0RVM0F
BQUFBQUFCYk5jV1dIZ3daMFZWVld4UlNtbElSVXBTWVdaRFN6RmlVUT09/w8DA
WYLRGVzdENvdW50cnkBC0Rlc3RDb3VudHJ5AQdrZXl3b3JkAQAAAWYNT3JpZ2luQ29
1bnRyeQENT3JpZ2luQ291bnRyeQEHa2V5d29yZAEAAAFmDkF2Z1RpY2tldFByaWNlA
Q5BdmdUaWNrZXRQcmljZQEFZmxvYXQAAAABBw=="
}

除了 fetch_size 以外还有些可以在_sql 接口请求体中使用的参数,如下:

query 需要执行的 SQL 语句,必须要设置的参数
fetch_size 默认 1000,每次返回的行数
filter 默认 none,使用 DSL 设置过滤器
request_timeout 默认 90s,请求超时时间
page_timeout 默认 45s,分页超时时间
tume_zone 默认 Z,时区
field_multi_value_leniency 默认 false,如果一个字段返回多个值时是否忽略

在这些参数中,fiter 可以使用 DSL 对文档做过滤,支持 DSL 中介绍的所有查询条件。query 中的 SQL 语句在翻译为 DSL 后,会与 filter 中的 DSL 查询语句共同组合到 bool 查询中。其中 SQL 语句生成的 DSL 将出现在 must 子句,而 filter中的 DSL 则出现在 filter 子句中。来想要查看 SQL 语句翻译后的 DSL. 可以使用_sql/translate 执行相同的请求,在返回结果中就可以看到翻译后的 DSL 了。

三、 SQL 语法

Elasticsearch 支持传统关系型数据库 SQL 语句中的查询语句,但并不支持DML、DCL 句。换句话说,它只支持 SELECT 语句,不支持 INSERT、UPDATE、DELETE语句。SELECT 语句以外,Elaticsarch 还支持 DESCRIBE 和 SHOW 语句。

SELECT 语句

SELECT 语句用于查询文档,基本语法格式:

SELECT select _expr,
[ FROM table_name」
[WHERE condtion]
[ GROUP BY grouping_element]
[ HAVING condition J
[ ORDER BY expression [ASC|DESC]
[ LIMIT[ count]]

通过示例可以看出,Elastiesearch 的 SELECT 语句跟普通 SQL 几乎没有什么区别,支持 SELECT、FROM、 WHERE、 GROUP BY、HAVING、 ORDER BY 及 LIMTT子句。

SELECT 子句中可以使用星号或文档字段名称列表,FROM 子句则指定要检索的索引名称,而 WHERE 子句则设定了检索的条件。一般的 SQL 查询使用这三个子句就足够了,而 GROUP BY 和 HAVING 子句则用于分组,ORDER BY 子句用于排序,而 LIMIT 一般则可以用于分页。和传统 SQL 语句非常接近。

DESCRIBE 语句

DESCRIBE 语句用于查看一个索引的基础信息,在返回结果中一般会包含column、type、mapping 三个列,分别对应文档的字段名称、传统数据库类型及文档字段中的类型。例如要查看索引的基本信息:

POST _sql?format=txt
{ "query":"describe kibana_sample_data_flights"
}

在这里插入图片描述

SHOW 语句

SHOW 语句包括三种形式,即 SHOW COLUMNS、SHOW FUNCTIONS 和 SHOW TABLES。
SHOW COLUMNS 用于查看一个索引中的字段情况,它的作用与 DESCRIBE 语句完全一样,其至连返回结果都是一样的。
SHOW FUNCTIONS 用于返回在 Elastiesearch SQL 中支持的所有函数,返回结果中包括 MIN、MAX、COUNT 等常用的聚集函数。
SHOW TABLES 用看 Elaticecearch 中所有的索引。

POST _sql?format=txt
{ "query":"show columns in kibana_sample_data_flights"
}
POST _sql?format=txt
{ "query":"show functions"
}
POST _sql?format=txt
{ "query":"show tables"
}

这三种形式都支持使用 LIKE 子句过滤返回结果,LIKE 子句在用法上与 SQL语句中的 LIKE 类似。例如,“show functions like 'a%"将只返回以 a 开头的函数。

四、操作符与函数

Elasticsearch SQL 中支持的操作符与函数有 100 多种,这些操作符大多与普通 SQL 语言一致,所以这里只介绍一些与普通 SQL 语句不一样的地方。
先来看一下比较操作符。一般等于比较在 SQL 中使用等号“=”,这在ElasticsearchSQL 中也成立。但是 Elasticseareh SQL 还引人了另一个等号比较“<= >”,这种等号可以在左值为 null 时不出现异常。
在这里插入图片描述
在这里插入图片描述
LIKE 操作符,在 LIKE 子句中可以使用%代表任意多个字符,而使用下划线 _ 代表单个字符。Elasticsearch SQL 不仅支持 LIKE 子句,还支持通过 RLIKE 子句以正则表达式的形式做匹配,这大大扩展了 SQL 语句模糊匹配的能力。
尽管使用 LIKE 和 RLIKE 可以实现模糊匹配,但它离全文检索还差得很远。SQL语句的 WHERE 子句一般都是使用字段整体值做比较,而没有使用词项做匹配的能力。为此 Elasticsearch SQL 提供了 MATCH 和 OUERY 两个函数,以实现在 SQL做全文检索。例如在示例 8-33 中的两干请求分别使用 match 和 query 函数,它们的作用都是检索 DestCounty 字段为 CN 的文档:

POST _sql?format=txt
{ "query":"""
select DestCountry, OriginCountry,AvgTicketPrice,score()
from kibana_sample_data_flights
where match(DestCountry,'CN') """
}
POST _sql?format=txt
{ "query":"""
select DestCountry, OriginCountry,AvgTicketPrice,score()
from kibana_sample_data_flights
where query('DestCountry:CN') """
}

在示例中的两个请求的 selet 子句中都使用了 SCORE 函数,它的作用是获取检索的相关度评分值。

Elasticsearch SQL支持传统SQL中的聚集函数,这包括MAX、MIN、AVG、COUNT、SUM 等。同时,它还支持一些 Elasticsearch 特有的聚集函数,这些聚集函数与Elasticsearch 聚集查询相对应。这包括 FIRST/FIRST_VALUE 和 LAST/LAST VALUE, 可用于查看某个字段首个和最后一个非空值; PERCENTILE 和 PERCENTILE RANK 用于百分位聚集,KURTOSIS,SKEWNESS、STDDEV_ POP、SUM OF SQUARES 和 VAR POP 可用于运算其他统计聚集。除了以上这些函数和操作符,Elasticsearch SQL还定义了一组用于日期、数值以及字符串运算的函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达深度学习——如何实现神经网络

来自吴恩达深度学习&#xff0c;仅为本人学习所用。 文章目录 神经网络的表示计算神经网络的输出激活函数tanh选择激活函数为什么需要非激活函数双层神经网络的梯度下降法 随机初始化 神经网络的表示 对于简单的Logistic回归&#xff0c;使用如下的计算图。 如果是多个神经元…

爬取NBA球员信息并可视化小白入门

网址:虎扑体育-NBA球员得分数据排行 第1页 步骤: 分析页面 确定URL地址模拟浏览器向服务器发送请求数据解析 提取想要的数据保存数据 爬虫所需要的模块 requests(发送HTTP请求)parsel(解析HTML内容)pandas(数据保存模块) 第一步分析页面 --确定是静态页面还是动态页面 右击点…

C语言初阶牛客网刷题——JZ17 打印从1到最大的n位数【难度:入门】

1.题目描述 牛客网OJ题链接 题目描述&#xff1a; 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 示例1 输入&…

寒假刷题记录

4968. 互质数的个数 - AcWing题库 涉及&#xff1a;快速幂&#xff0c;欧拉函数&#xff0c;分解质因数 #include <bits/stdc.h> #define fi first #define se second #define endl \n #define pb push_backusing namespace std; using LL long long;const int mod 9…

OSI5GWIFI自组网协议层次对比

目录 5G网络5G与其他协议栈各层映射 5G网络 物理层 (PHY) 是 5G 基站协议架构的最底层&#xff0c;负责将数字数据转换为适合无线传输的信号&#xff0c;并将接收到的无线信号转换为数字数据。实现数据的编码、调制、多天线处理、资源映射等操作。涉及使用新的频段&#xff08…

Java高频面试之SE-16

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本牛马baby今天又来了&#xff01;哈哈哈哈哈嗝&#x1f436; Java中异常的处理方式有哪些&#xff1f; 在 Java 中&#xff0c;异常的处理方式主要有以下几种&#xff1a; 1. 使用 try-catch 语句 …

HTML中的`<!DOCTYPE html>`是什么意思?

诸神缄默不语-个人CSDN博文目录 在学习HTML时&#xff0c;我们经常会看到HTML文档的开头出现<!DOCTYPE html>&#xff0c;它是HTML文件的第一行。很多初学者可能会疑惑&#xff0c;为什么需要这行代码&#xff1f;它到底有什么作用呢&#xff1f;在这篇文章中&#xff0…

Games104——游戏中地形大气和云的渲染

原文链接 原文链接 这里写目录标题 地形的几何Heightfield高程图网格自适应细分三角形的剖分二叉树T-Junctions四叉树TIN&#xff08;Triangulated Irregular Network&#xff09;不规则三角形网格 GPU Drived Tessellator(Hardware Tessellation)Mesh ShaderNon-HeightField…

Springboot自动配置的原理

先拿redis来举个例子 第一步导入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 第二步配置 spring: redis: database:host:127.0.0.1 port…

【动态规划】落花人独立,微雨燕双飞 - 8. 01背包问题

本篇博客给大家带来的是01背包问题之动态规划解法技巧. &#x1f40e;文章专栏: 动态规划 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺便…

记一次虚机上传过慢问题排查

最近线上虚机有个特殊的用户反馈&#xff0c;用户反馈虚机从A服务器下载文件特别慢&#xff0c;于是scp A服务器数据到本地client&#xff0c;发现 只有几十K的流量。 当时第一反应怀疑是虚机负载压力比较大&#xff0c;但是查看虚机IO以及负载都很低。。。。 然后tcpdump抓包发…

web服务器 网站部署的架构

WEB服务器工作原理 Web web是WWW(World Wide Web)的简称&#xff0c;基本原理是&#xff1a;请求(客户端)与响应(服务器端)原理&#xff0c;由遍布在互联网中的Web服务器和安装了Web浏览器的计算机组成 客户端发出请求的方式&#xff1a;地址栏请求、超链接请求、表单请求 …

数据结构——实验七·排序

嗨~~欢迎来到Tubishu的博客&#x1f338;如果你也是一名在校大学生&#xff0c;正在寻找各种编程资源&#xff0c;那么你就来对地方啦&#x1f31f; Tubishu是一名计算机本科生&#xff0c;会不定期整理和分享学习中的优质资源&#xff0c;希望能为你的编程之路添砖加瓦⭐&…

Windows系统提示RunDLL PcaWallpaperAppDetect错误修复方法

最近&#xff0c;Win11 24H2预览版和Win10 LTSC 2025功能更新偶尔会触发RunDLL错误弹窗 具体表现为 //英文提示 Error in C:\WINDOWS\system32\PcaSvc.dll Missing entry: PcaWallpaperAppDetect//中文提示 C:\WINDOWS\system32\PcaSvc.dll出错 丢失条目:PcaWallpaperAppDe…

计算机组成原理——数据表示(二)

当生活的压力和困惑缠绕在身边&#xff0c;我们往往需要振奋精神&#xff0c;勇往直前。无论在何种困境中&#xff0c;我们都要保持积极的态度和坚定的信念。将悲观的情绪抛之脑后&#xff0c;展现出坚强的意志力和无尽的活力。振奋精神意味着我们要战胜自己内心的负面情绪&…

人源化抗体的改造方式及其优势【卡梅德生物】

随着生物制药行业的迅速发展&#xff0c;抗体药物已经成为治疗多种疾病&#xff08;尤其是癌症、免疫性疾病等&#xff09;的重要手段。抗体人源化改造技术作为抗体药物研发的关键技术之一&#xff0c;在提高药物疗效和降低免疫原性方面发挥了至关重要的作用。 1. 人源化抗体的…

【Linux】深刻理解动静态库

1.什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个⼈的代码都从零开始&#xff0c;因此库的存在意义⾮同寻常。本质上来说库是⼀种可执⾏代码的⼆进制形式&#xff0c;可以被操作系统载…

【java数据结构】其他非基于比较排序

【java数据结构】其他非基于比较排序 一、计数排序二、基数排序三、桶排序 博客最后附有整篇博客的全部代码&#xff01;&#xff01;&#xff01; 一、计数排序 场景&#xff1a;集中在某个范围内的一组数据 思路&#xff1a; 找到这组序列的最大值和最小值&#xff0c;通过…

博客之星2024年度总评选——我的年度创作回顾与总结

2024年&#xff0c;是我在CSDN博客上持续耕耘、不断成长的一年。在此&#xff0c;与大家分享一下我的年度创作回顾与总结。 一、创作成长与突破 在人工智能领域&#xff0c;技术迭代迅速&#xff0c;知识更新频繁。为了保持自己的竞争力&#xff0c;在今年&#xff0c;我始终…

ChromeOS 132 版本更新

ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户&#xff0c;包括以下功能&#xff1a; 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…