我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Elasticsearch SQL的用法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Elasticsearch SQL的用法是什么

Elasticsearch SQL的用法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

小编将介绍不同版本中Elasticsearch SQL的使用方法,总结了实际中常用的方法和操作,并给出了几个具体例子。

一、5.x中ES-SQL用法

Elasticsearch 5.x版本中,SQL功能还没有集成到Elasticsearch源码中,需要下载第三方插件后才能使用,配置过程如下: 

1.安装ES-SQL依赖node npm 

ES-SQL 5.x版本以后,安装需要依赖node和npm,先安装node和npm,安装后在检查node及npm的安装,命令如下: 

yum -y install nodejs npm 
node -v  
npm -v



2.下载ES-SQL并安装 

然后切换到ES的根目录下,执行如下命令,下载并安ES-SQL插件: 

./bin/elasticsearch-plugin install https://github.com/NLPchina/elasticsearch-sql/releases/download/5.6.30/.elasticsearch-sql-5.6.3.0.zip

离线包安装可以执行: 

./bin/elasticsearch-plugin install file:/elasticsearch-sql-5.6.3.0.zip

3.重启ES服务 

执行完上述三步,你就可以使用SQL探索数据了,以kibana中的使用为例:

Elasticsearch SQL的用法是什么

二、6.4 Elasticsearch SQL用法

1    Elasticsearch SQL支持的数据类型

首先我们看下Elasticsearch SQL和标准SQL中数据类型的对应关系:

Elasticsearch SQL的用法是什么


2    Elasticsearch SQL的使用方式

Elasticsearch SQL支持三种client: REST Interface, command-line,JDBC

2.1 REST Interface

Elasticsearch SQL的用法是什么

建议先在kibana中测试(可以一次执行多个SQL),查询通过之后把查询copy到项目中进行测试。

6.3+ Elasticsearch SQL有个非常实用的功能,就是可以用translate api把SQL语句翻译成ES DSL语句,对于学习DSL感到头痛的同学有福啦。

Elasticsearch SQL的用法是什么

2.2 command-line

命令行界面的进入方式:

./elasticsearch-sql-cli  IP:PORT(本机ip和es的端口)

进入后的界面如下:

Elasticsearch SQL的用法是什么

命令行一般作为SQL测试时使用。

2.3 JDBC

该组件为X-Pack中的收费组件,感兴趣的同学可以参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-jdbc.html

3   常用SQL语句

注意:查询单个索引名一定要用""引上,否则会报错

*查看当前用户所有的索引:“SHOW TABLES;”

Elasticsearch SQL的用法是什么

精准查询某个索引:“SHOW TABLES LIKE ‘indexname’;”

Elasticsearch SQL的用法是什么


通配符查询某些索引:“SHOW TABLES LIKE ‘ ’;”

Elasticsearch SQL的用法是什么

Elasticsearch SQL的用法是什么

Elasticsearch SQL的用法是什么

*查看某个索引结构:“DESCRIBE table;” 或者 “DESC table;”

Elasticsearch SQL的用法是什么

上面两个命令都是“SHOW COLUMNS [ FROM | IN ] ? table”命令的别名

Elasticsearch SQL的用法是什么

*查看函数:“SHOW FUNCTIONS [ LIKE? pattern? ]?” 

精准查询某个函数:

Elasticsearch SQL的用法是什么

通配符查询某些函数:

Elasticsearch SQL的用法是什么

Elasticsearch SQL的用法是什么

查看所有函数:

Elasticsearch SQL的用法是什么

常用的聚合函数: 

SELECT MIN(value_1) min, MAX(value_1) max, AVG(value_1) avg,SUM(value_1) sum,COUNT(*) count,COUNT(DISTINCT value_1) dictinct_count FROM "micloud_es_sink_zhouyongbo_test-2018.10.19”;

Elasticsearch SQL的用法是什么

SELECT语句的语法排序如下:

SELECT select_expr [, ...]
[ FROM table_name ]  
[ WHERE condition ] 
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ LIMIT [ count ] ]

*限定返回数据的条数:“limit” 

SELECT * FROM "micloud_es_sink_zhouyongbo_test-2018.10.19” limit 10 ;

注意SQL中的limit比fetch_size中的优先级高,例如下面的例子返回的是5条 :

{ 
  "query": "SELECT * FROM "micloud_es_sink_zhouyongbo_test-2018.10.19” limit 5", 
  "fetch_size":10 
}

*排序:“order by + 字段名字 + asc/desc”

SELECT * FROM "micloud_es_sink_zhouyongbo_test-2018.10.19” ORDER BY value_1 asc/desc;

根据多个字段排序: 

select city c,value_1 + 1 vp from "micloud_es_sink_zhouyongbo_test-2018.10.19" group by c,vp order by c desc,vp asc;

Elasticsearch SQL的用法是什么


*WHERE根据条件查询:

WHERE后面跟ES复杂数据类型: 

SELECT first_name FROM index WHERE first_name.raw = ‘John’  ;

WHERE后面跟多个查询条件: 

SELECT * FROM micloud_es_sink_zhouyongbo_test* where city=‘北京' and value_1=8 ORDER BY value_1 desc ;

*group by分组查询: 

根据单个字段分组查询:

select city,count(city) as count_city,sum(value_1) as count_value_1 from "micloud_es_sink_zhouyongbo_test-2018.10.19" group by city;

Elasticsearch SQL的用法是什么


根据多个字段分组查询: 

select city,count(city) count_city,sum(value_1) count_value_1 from "micloud_es_sink_zhouyongbo_test-2018.10.19" group by city,value_1;

Elasticsearch SQL的用法是什么


对于比较长的字段,也可以对该字段声明别名,并对别名进行分组查询,声明字段别名的“as”可省略: 

select city c,count(city) count_city,sum(value_1) count_value_1 from "micloud_es_sink_zhouyongbo_test-2018.10.19" group by c,value_1;

Elasticsearch SQL的用法是什么

还可以对某字段进行计算,然后按照计算结果分组查询: 

select city c,value_1 + 1 vp from "micloud_es_sink_zhouyongbo_test-2018.10.19" group by c,vp;

Elasticsearch SQL的用法是什么


*HAVING过滤分组结果(ES-SQL引擎同样会在分组之后计算HAVING语句):

Select city c,count(*) count from "micloud_es_sink_zhouyongbo_test-2018.10.19" group by c having count > 53834;

Elasticsearch SQL的用法是什么


*查询嵌套类型:

select * from zhouyongbo_test04 where love.kaishu=‘鲁公’;

Elasticsearch SQL的用法是什么

*用通配符查询多个索引:

Elasticsearch SQL的用法是什么


注意被查询索引必须有相同的mapping,否则会有如下报错:

Elasticsearch SQL的用法是什么


常用的方法和操作汇总:

*比较操作: 

Equality (=) 

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where value_1 = 6 limit 5;

Inequality (<> or != or 

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where value_1 <> 6 limit 5;

Comparison (<, 

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where value_1 >= 6 limit 5;

BETWEEN

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where value_1 between 6 and 8 limit 5;

IS NULL/IS NOT NULL

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where value_1 is not NULL limit 5;

*逻辑操作:

AND

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where value_1 > 5 and value_1 < 7 limit 5;

OR

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where value_1 = 5 or value_1 = 7 limit 5;

NOT

select * from "micloud_es_sink_zhouyongbo_test-2018.10.19" where not value_1 > 5 limit 5;

*数学运算操作: 

Add (+)

select  1 + 1 as x;

Subtract (infix -) 

select  1 - 1 as x;

Negate (unary -) 

select  - 1 as x;

Multiply (*) 

select  6 * 6 as x;

Divide (/) 

select  30 / 5 as x;

Modulo or Reminder(%) 

select  30 % 7 as x;

*数学函数:(分为通用函数和三角函数两部分 ):

通用函数: 

ABS:求数字的绝对值 

select ABS(value_1) from "micloud_es_sink_zhouyongbo_test-2018.10.19" limit 5;

CBRT:求数字的立方根,返回double

select value_1 v,CBRT(value_1) cbrt from "micloud_es_sink_zhouyongbo_test-2018.10.19" limit 5;

CEIL:返回大于或者等于指定表达式最小整数(double)

select value_1 v,CEIL(value_1) from "micloud_es_sink_zhouyongbo_test-2018.10.19" limit 5;

CEILING:等同于CEIL

select value_1 v,CEILING(value_1) from "micloud_es_sink_zhouyongbo_test-2018.10.19" limit 5;

E:返回自然常数e(2.718281828459045)

select  value_1,E(value_1)  from  "micloud_es_sink_zhouyongbo_test-2018.10.19"  limit  5;

ROUND:四舍五入精确到个位

select ROUND(-3.14);

FLOOR:向下取整

select FLOOR(3.14);

LOG:计算以2为底的自然对数

select LOG(4);

LOG10:计算以10为底的自然对数

select LOG10(100);

SQRT:求一个非负实数的平方根

select  SQRT(9);

EXP:此函数返回e(自然对数的底)的X次方的值

select  EXP(3);

EXPM1:返回e x  -1

select  EXPM1(3);

三角函数:

DEGREES:返回X从弧度转换为度值

select DEGREES(x);

RADIANS:返回X从度转换成弧度的值

select RADIANS(x);

SIN:返回X的正弦

select SIN(x);

COS:返回X,X值是以弧度给出的余弦值

select COS(角度);

TAN:返回参数X,表示以弧度的切线值

select TAN(角度);

ASIN:返回X的反正弦,X的值必须在-1至1范围内,返回NULL

select ASIN(x);

ACOS:返回X的反正弦,X值必须-1到1之间范围否则将返回NULL

select ACOS(x);

ATAN:返回X的反正切

select ATAN(x);

SINH:返回X的双曲正弦值

select SINH(x);

COSH:返回X的双曲余弦值

select COSH(x);

*日期和时间处理相关方法:

YEAR:

SELECT YEAR(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS year;

MONTH_OF_YEAR() or MONTH():

SELECT MONTH(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS month;

WEEK_OF_YEAR() or WEEK():

SELECT WEEK(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS week;

DAY_OF_YEAR() or DOY(),效果等同于EXTRACT(

SELECT DOY(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS day;

DAY_OF_MONTH(), DOM(), or DAY():

SELECT DAY(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS day;

DAY_OF_WEEK() or DOW():

SELECT DOW(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS day;

HOUR_OF_DAY() or HOUR():

SELECT HOUR(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS hour;

MINUTE_OF_DAY():

SELECT MINUTE_OF_DAY(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS minute;

MINUTE_OF_HOUR() or MINUTE():

SELECT MINUTE(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS minute;

SECOND_OF_MINUTE() or SECOND():

SELECT SECOND(CAST('2018-10-23T16:59:27Z' AS TIMESTAMP)) AS second;

如上就是6.4 Elasticsearch SQL支持的主要用法了,如果在优化SQL语句之后还不满足查询需求,可以拿SQL和DSL混用,ES会先根据SQL进行查询,然后根据DSL语句对SQL的执行结果进行二次查询,下面是个小例子:

POST /_xpack/sql?format=txt 
{ 
    "query": "SELECT * FROM library ORDER BY page_count DESC", 
    "filter": { 
        "range": { 
            "page_count": { 
                "gte" : 100, 
                "lte" : 200 
            } 
        } 
    }, 
    "fetch_size": 5
}

这个查询就会先根据“query”后面的SQL进行查询,然后用执行“filter”和“fetch_size” DSL语法对查询结果进行过滤,进而返回最终结果。

关于Elasticsearch SQL的用法是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Elasticsearch SQL的用法是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

sql distinct的用法是什么

在SQL中,DISTINCT关键字用于从查询结果中返回唯一不同的值。它可以应用于单个列或多个列。DISTINCT可以用于SELECT语句中,以过滤重复的行。用法示例:1. SELECT DISTINCT column_name FROM t
2023-09-12

SQL Prompt的用法是什么

SQL Prompt 是一款由Redgate开发的SQL开发工具,它的主要功能是提供SQL编码自动完成、代码格式化、代码片段、代码分析等功能,以提高SQL编写的效率和质量。使用SQL Prompt,您可以获得以下功能:代码自动完成:根据您
2023-10-24

sql modify的用法是什么

在SQL中,MODIFY语句用于修改数据库表中现有列的数据类型、约束或属性。它通常用于在表中添加新列、更改列的数据类型或修改列的约束。例如,以下是使用MODIFY语句修改表中列的数据类型的示例:ALTER TABLE table_nam
sql modify的用法是什么
2024-04-09

SQL JOIN的用法是什么

SQL JOIN用于将两个或多个表按照指定的关联条件连接在一起,从而得到一个新的结果集。JOIN操作可以根据表中的列之间的关系进行连接,返回满足连接条件的行。常用的JOIN类型包括:1. INNER JOIN(内连接):返回两个表中满足连接
2023-10-11

sql fiddle的用法是什么

SQL Fiddle是一个在线的SQL编程环境,可以用来编写、运行和调试SQL代码。使用SQL Fiddle,您可以:选择不同的数据库系统,如MySQL、Oracle、PostgreSQL等。编写和编辑SQL代码。执行SQL查询和操作
sql fiddle的用法是什么
2024-04-09

sql set的用法是什么

在SQL中,SET是一个用于更新数据库表中的数据的关键字。它可以按照指定的条件更新表中的一列或多列的值。SET语句的基本语法如下:UPDATE table_nameSET column1 = value1, column2 = val
sql set的用法是什么
2024-04-09

sql identity的用法是什么

在 SQL 中,IDENTITY 是一种属性,用于在插入新记录时自动为表中的某个列生成唯一的递增数字值。IDENTITY 可以应用于整数列,以确保每个插入的记录都有唯一的标识符。使用 IDENTITY 属性时,需要指定其起始值、增量值和最
sql identity的用法是什么
2024-04-09

sql statement的用法是什么

SQL(Structured Query Language)语句用于与数据库进行交互,用于查询、插入、更新、删除数据等操作。SQL语句可以分为以下几类:DDL(Data Definition Language):用于定义数据库对象,如创建表
sql statement的用法是什么
2024-04-09

sql declare的用法是什么

SQL的DECLARE语句用于声明一个变量,并为其分配一个数据类型和初始值。语法格式如下:DECLARE variable_name [type] [DEFAULT initial_value];其中,variable_name是变量
sql declare的用法是什么
2024-04-09

python中elasticsearch的作用是什么

python中elasticsearch的作用是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenSt
2023-06-14

elasticsearch模糊匹配的方法是什么

在Elasticsearch中,可以使用模糊匹配实现模糊搜索。以下是几种常用的模糊匹配方法:1. 通配符查询(Wildcard Query):使用通配符(*和?)进行模糊匹配。例如,使用"el*icse*ch"可以匹配到"elasticse
2023-10-11

Elasticsearch的原理是什么

本篇内容主要讲解“Elasticsearch的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch的原理是什么”吧!Lucene 和 ESLuceneLucene
2023-06-16

sql中casewhen的用法是什么

在SQL中,CASE WHEN语句用于根据条件进行条件判断并返回不同的值。语法如下:CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE default_r
sql中casewhen的用法是什么
2024-05-21

sql中rownum的用法是什么

在SQL中,ROWNUM是一个伪列(pseudo column),它用于限制返回结果中的行数。它的用法如下:在SELECT语句中使用ROWNUM限制结果集的行数,例如:SELECT * FROM table_name WHERE ROWNU
sql中rownum的用法是什么
2024-04-09

sql中dual的用法是什么

在SQL中,dual是一个虚拟的表,主要用于在没有实际表可用的情况下执行一些查询操作。在Oracle数据库中,dual表是一个系统提供的虚拟表,只包含一行一列的数据。常用于检查函数、计算表达式或返回固定值等操作。例如,可以使用dual表来
sql中dual的用法是什么
2024-04-09

sql中declare的用法是什么

在SQL中,DECLARE用于声明一个局部变量或者游标变量。它的语法如下:DECLARE variable_name [type] [DEFAULT value];其中,variable_name是变量的名称,可以使用任何合法的标识符;
2023-10-23

编程热搜

目录