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:es_pwd@es_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]
希望本文對你有幫助,請點個贊鼓勵一下作者吧~ 謝謝!