在es中使用SQL功能

在es中使用SQL功能

介绍

Elasticsearch SQL是Elasticsearch的扩展功能,允许用户使用SQL语法查询Elasticsearch数据。通过SQL接口,开发者可以利用熟悉的SQL语言,编写更直观、更易懂的查询,并且避免对大量复杂的原生REST请求的编写。

官方ElasticSearch 从 6.3.0 版本也开始支持 SQL 查询了,官方的文档和介绍:https://www.elastic.co/guide/en/elasticsearch/reference/8.9/sql-overview.html

Elasticsearch SQL主要优势

  1. 易用性:使用熟悉的SQL语法,降低了学习成本。
  2. 灵活性:支持复杂的查询和聚合操作。
  3. 性能:Elasticsearch本身的分布式架构和高效查询引擎保证了查询性能。
  4. 集成性:通过JDBC驱动,可以与各种SQL工具和应用程序集成。

Elasticsearch SQL的使用

其实和查询Mysql差不多的查询语句

SELECT select_expr [, ...]
[ FROM table_name ]
[ WHERE condition ]
[ GROUP BY grouping_element [, ...] ]
[ HAVING condition]
[ ORDER BY expression [ ASC | DESC ] [, ...] ]
[ LIMIT [ count ] ]
[ PIVOT ( aggregation_expr FOR column IN ( value [ [ AS ] alias ] [, ...] ) ) ]

目前FROM只支持单表

用SQL查询

# 使用curl命令查询
curl -X POST "localhost:9200/_sql?format=txt" -H 'Content-Type: application/json' -d'{  "query": "SELECT * FROM prometheusalert-20249 order by created"}'

# 使用 kibana界面
POST /_sql?format=txt
{
  "query": "SELECT created,DATETIME_FORMAT(created, 'YYYY-MM-dd') date FROM \"prometheusalert-20249\" order by created"
}

image-20241114150542574

format=txt 是指查询返回结果的数据格式,其他返回格式参考:https://www.elastic.co/guide/en/elasticsearch/reference/8.9/sql-rest-format.html

将SQL转换为DSL

GET /_sql/translate 
{"query":"SELECT * FROM \"prometheusalert-20249\" limit 1"}


# 返回结果
{
  "size" : 1,
  "_source" : false,
  "fields" : [
    {
      "field" : "alertname"
    },
    {
      "field" : "created",
      "format" : "strict_date_optional_time_nanos"
    },
    {
      "field" : "description"
    },
    {
      "field" : "endsAt",
      "format" : "strict_date_optional_time_nanos"
    },
    {
      "field" : "instance"
    },
    {
      "field" : "labels"
    },
    {
      "field" : "level"
    },
    {
      "field" : "startsAt",
      "format" : "strict_date_optional_time_nanos"
    },
    {
      "field" : "status"
    },
    {
      "field" : "summary"
    }
  ],
  "sort" : [
    {
      "_doc" : {
        "order" : "asc"
      }
    }
  ]
}

全文检索

当使用MATCH函授时,会启用全文搜索功能。

MATCH函数使用

GET /_sql?format=txt
{"query":"select * from \"prometheusalert-202410\" where MATCH(description, 'http状态码检测失败')  limit 10"}

# 使用格式
MATCH(field_exp,constant_exp[, options]) 
field_exp:匹配字段
constant_exp:匹配常量表达式

DESCRIBE

使用DESCRIBE语句查看索引中有哪些字段,比如查看es_order索引的字段,查询语句如下。

POST /_sql?format=txt
{  "query": "DESCRIBE \"prometheusalert-202410\""}

SHOW TABLES

使用SHOW TABLES查看所有的索引

POST /_sql?format=txt
{  "query": "SHOW TABLES"}

查询支持的函数

POST /_sql?format=txt
{  "query": "SHOW FUNCTIONS"}

POST /_sql?format=txt
{  "query": "SHOW FUNCTIONS LIKE '%DATE%'"}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇