ELK系列(十二)、使用SQL查询ElasticSearch7.7.0
ES的DSL可能对很多人来说有学习成本,但SQL相信每个开发无论是应用开发,大数据开发还是数据分析人员应该都是最熟悉的,本篇就介绍一下如何使用es7的sql功能对索引数据进行查询。
ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0
ELK系列(二)、在Kibana中使用RESTful操作ES库
ELK系列(四)、Logstash读取nginx日志写入ES中
ELK系列(五)、Logstash修改@timestamp时间为日志的产生时间
ELK系列(六)、修改Nginx日志为Json格式并使用Logstash导入至ES
ELK系列(七)、Filebeat+Logstash采集多个日志文件并写入不同的ES索引中
ELK系列(八)、使用Filebeat+Redis+Logstash收集日志数据
ELK系列(十)、ES中文分词器IK插件安装和配置远程词库热加载
ELK系列(十一)、ElasticSearch7.7.0插件es-head安装及使用
-------------------------------在ES7中使用SQL查询数据------------------------------
查询数据
下面的命令会将SQL在后台转为DSL命令查询索引:
#二维表返回
POST /_sql?format=txt
{
"query": "SELECT host,ip,machine.os,bytes FROM kibana_sample_data_logs where machine.os='win 8' and host like 'cdn.%.org' order by 4 desc limit 50"
}
#formart返回类型支持很多,可参考官方文档:
有csv,txt,tsv,json,yml等等
https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-rest-format.html
翻译成DSL
下面的命令可以将SQL转为DSL:
POST /_sql/translate
{
"query": "SELECT host,ip,machine.os,bytes FROM kibana_sample_data_logs where machine.os='win 8' and host like 'cdn.%.org' order by 4 desc limit 50"
}
使用DSL查询
上面转换成的DSL可以直接使用对索引进行查询,效果与第一个里面使用SQL查询是一样的结果:
命令行模式
使用下面的命令进入es-sql的命令行模式:
$ ./bin/elasticsearch-sql-cli
$ ./bin/elasticsearch-sql-cli https://es_host:9200
$ ./bin/elasticsearch-sql-cli https://es_user:aaa@qq.com_host:9200
效果与在kibana中的一样:
JDBC模式
下载jar包:https://www.elastic.co/cn/downloads/jdbc-client
或者使用maven:
<repositories>
<repository>
<id>elastic.co</id>
<url>https://artifacts.elastic.co/maven</url>
</repository>
</repositories>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>x-pack-sql-jdbc</artifactId>
<version>7.7.0</version>
</dependency>
在DBeaver中配置ES7的连接,并测试,会报错,原因是因为白金版才支持JDBC的功能:
Query execution failed
原因:
SQL 错误: current license is non-compliant for [jdbc]
希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!