使用SQL查询ES数据

使用SQL查询ES数据

32 进阶:使用SQL查询ES数据

环境准备

需要首先安装ES8.x 和 Kibana8.x,自行安装

利用脚本导入测试数据

这里使用的是python脚本,直接运行即可

Elasticsearch(["https://elastic:[email protected]:9200"], verify_certs=False)

这一步部分填写你自己的信息即可

复制代码
from elasticsearch import Elasticsearch
from faker import Faker
import ssl
import random
es = Elasticsearch(["https://elastic:[email protected]:9200"], verify_certs=False)
# 连接到 Elasticsearch 实例

# 创建一个 Faker 实例,用于生成有意义的假数据
fake = Faker()

# 创建索引(类似于数据库中的表)
index_name = 'test_sql_query4'
es.indices.create(index=index_name, ignore=400)

# 插入 2000 条有意义的数据
for i in range(2000):
    doc = {
        'name': random.choice(['秦', '楚', '齐', '燕', '韩', '魏', '赵']),
        'age': fake.random_int(min=18, max=99, step=1),
        'city': fake.city(),
        'occupation': fake.job(),
        'salary': fake.random_int(min=30000, max=100000, step=1000),
        'timestamp': fake.date_time_this_decade().strftime("%Y-%m-%d")
    }
    es.index(index=index_name, body=doc)

print("数据插入完成。")

如何按照上面的步骤,安装成功后就可以学习今天的内容了

SQL学习

复制代码
# 解析SQL
POST /_sql/translate
{
  "query": """
  SELECT * FROM "test_sql_query4" order by age  LIMIT 10
  """
}

基本查询

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT * FROM "test_sql_query4"
  """
}

排序查询

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT * FROM "test_sql_query4" order by age desc
  """
}

过滤查询

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT * FROM "test_sql_query4" where name='秦' order by age desc
  """
}

POST /_sql?format=txt
{
  "query": """
  SELECT * FROM "test_sql_query4" where name in ('秦','赵') order by age desc
  """
}

范围查询

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT * FROM "test_sql_query4" where age<50 and age>30  order by age desc
  """
}

分组查询(group)

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT name,count(1) FROM "test_sql_query4" group by name
  """
}

分组过滤查询(group+having)

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT name,count(1) FROM "test_sql_query4" group by name having count(1)>300
  """
}

聚合函数统计

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT count(name),max(age),min(age),sum(salary) FROM "test_sql_query4"
  """
}

limit查询

复制代码
POST /_sql?format=txt
{
  "query": """
  SELECT * FROM "test_sql_query4" order by age limit 10
  """
}

分页查询

复制代码
POST /_sql?format=json
{
  "query": """
  SELECT * FROM "test_sql_query4" order by age
  """,
  "fetch_size":2
}

POST /_sql?format=json
{
  "cursor": "从前面一次查询中获得"
}
相关推荐
emo了小猫2 小时前
Mybatis #{} 和 ${}区别,使用场景,LIKE模糊查询避免SQL注入
数据库·sql·mysql·mybatis
青春之我_XP8 小时前
【基于阿里云搭建数据仓库(离线)】Data Studio创建资源与函数
大数据·数据仓库·sql·dataworks·maxcompute·data studio
Snk0xHeart9 小时前
极客大挑战 2019 EasySQL 1(万能账号密码,SQL注入,HackBar)
数据库·sql·网络安全
Elastic 中国社区官方博客12 小时前
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
大数据·人工智能·elasticsearch·搜索引擎·云计算·全文检索·aws
Tom Boom13 小时前
Git常用命令完全指南:从入门到精通
大数据·git·elasticsearch·docker·自动化测试框架
小屁孩大帅-杨一凡13 小时前
在 Oracle 中,创建不同类型索引的 SQL 语法
数据库·sql·oracle
一介草民丶15 小时前
Jenkins | Jenkins构建成功服务进程关闭问题
运维·servlet·jenkins
星星点点洲15 小时前
【Elasticsearch】 查询优化方式
elasticsearch·搜索引擎
@BreCaspian16 小时前
Git 推送失败解决教程——error: failed to push some refs to
大数据·git·elasticsearch