SQL for ES

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 之前介绍过ElasticSearch,它部署简单,搜索聚合功能强大,而且和其他大数据框架整合起来使用,有一点比较不方便,就是查询都需要通过JSON作为请求Body来提交查询,请求响应也是JSON,作为习惯使用SQL的我,迫不及待的试用了一下Crate(crate.io),它是在ElasticSearch之上封装了SQL接口,用户可以通过SQL语句来完成搜索和统计,支持的SQL语法还蛮多的,很想MySQL。

之前介绍过ElasticSearch,它部署简单,搜索聚合功能强大,而且和其他大数据框架整合起来使用,有一点比较不方便,就是查询都需要通过JSON作为请求Body来提交查询,请求响应也是JSON,作为习惯使用SQL的我,迫不及待的试用了一下Crate(crate.io),它是在ElasticSearch之上封装了SQL接口,用户可以通过SQL语句来完成搜索和统计,支持的SQL语法还蛮多的,很想MySQL。

本文记录一下Crate的安装配置(两个节点的Crate集群)和简单使用。

下载和安装Crate

可以从https://cdn.crate.io/downloads/releases/nightly/下载crate的最新版本。

下载后解压到指定目录即可。

配置Crate

Crate的配置和ElasticSearch非常类似,以两个节点的Crate集群为例。

cd $CRATE_HOME/conf

编辑crate.yml,修改以下参数:

 
 
  1. cluster.name: lxw1234_crate
  2. node.name: crate_node_17
  3. index.number_of_replicas: 2
  4. path.conf: /home/liuxiaowen/crate-0.54.0/config
  5. path.data: /home/liuxiaowen/crate-0.54.0/data
  6. path.work: /home/liuxiaowen/crate-0.54.0/tmp
  7. path.logs: /home/liuxiaowen/crate-0.54.0/logs
  8. path.plugins: /home/liuxiaowen/crate-0.54.0/plugins
  9.  
  10. network.bind_host: 172.16.212.17
  11. network.publish_host: 172.16.212.17
  12. network.host: 172.16.212.17
  13. gateway.recover_after_nodes: 2
  14. discovery.zen.minimum_master_nodes: 2
  15. gateway.expected_nodes: 2
  16. discovery.zen.ping.timeout: 10s
  17. discovery.zen.fd.ping_interval: 10s

编辑$CRATE_HOME/bin/crate.in.sh,配置节点使用的内存,根据机器自身内存而定,最大内存一般不要超过物理内存的50%;

CRATE_MIN_MEM=8g

CRATE_MAX_MEM=16g

配置JAVA_HOME,我这里使用了jdk1.8.0_65

启动Crate

在两个节点上,
cd $CRATE_HOME/bin
执行./crate -d 在后台启动Crate,之后可以在配置的path.logs目录下,看到以${ cluster.name }.log命名的日志。

使用Crate命令行

类似于其他数据库,Crate提供了一个命令行来供用户执行SQL查询。
cd $CRATE_HOME/bin
执行./crash进入命令行;

crate

在Crate命令行使用\c 172.16.212.17:4200连接到Crate;

创建表

在Crate命令行使用下面的SQL语句创建表:

 
 
  1. CREATE TABLE sitelog (
  2. cookieid STRING,
  3. siteid STRING,
  4. visit_id STRING,
  5. pv LONG,
  6. is_return_cookie INTEGER,
  7. is_bounce_visit INTEGER,
  8. visit_stay_times INTEGER,
  9. visit_view_page_cnt INTEGER,
  10. region STRING,
  11. city STRING
  12. );
  13.  
  14.  
  15. cr> show tables;
  16. +------------+
  17. | table_name |
  18. +------------+
  19. | sitelog |
  20. +------------+
  21. SHOW 1 row in set (0.019 sec)
  22. cr>
  23.  

从外部批量加载数据

crate提供了一个COPY命令,用于从外部文本文件加载数据到表中,但只支持JSON格式的文本,比如:

 
 
  1. [liuxiaowen@dev sitelog]$ head sitelog_000005_0_9.json
  2. {"cookieid" : "DE9C68B401DBE5566A9676","siteid" : "633","visit_id" : "805cdab5-8361-4134-9bbe-7c54771d4dc8","pv" : 1,
  3. "is_return_cookie" : 0,"is_bounce_visit" : 1,"visit_stay_times" : 0,"visit_view_page_cnt" : 1,"region" : "江苏","city" : "徐州"}
  4. {"cookieid" : "DE9C68B40422A9566A68F2","siteid" : "633","visit_id" : "7f844323-e0c0-48b4-bc1b-69055ac3c308","pv" : 1,
  5. "is_return_cookie" : 0,"is_bounce_visit" : 1,"visit_stay_times" : 0,"visit_view_page_cnt" : 1,"region" : "江苏","city" : "徐州"}
  6. {"cookieid" : "DE9C68B4066B7F566A6F36","siteid" : "633","visit_id" : "045c3a13-41bf-45c4-93ce-7725a00ada5f","pv" : 1,
  7. "is_return_cookie" : 0,"is_bounce_visit" : 1,"visit_stay_times" : 0,"visit_view_page_cnt" : 1,"region" : "江苏","city" : "徐州"}
  8.  

JSON对象中的k需要和表的字段名称相同。

在Crate命令行使用COPY命令加载数据:

crate

加载的速度还是非常快的。

SQL查询

可以从Crate官网上查看支持的SQL语法:https://crate.io/docs/reference/sql/dql.html

crate

crate

值得关注的是,Crate在做COUNT DISTINCT查询的时候,查出来的是真实去重后的数,没有误差,但查询响应时间要慢一些,有待研究。

Crate的监控界面

Crate提供了一个比较炫的监控界面,非常有用,Crate集群启动后,在浏览器输入:http://172.16.212.102:4200/admin/ 进入监控界面:

OverView页面:集群整体健康及负载状况。

crate

Tables页面:Crate中所有Table及Schema的情况。

crate

Cluster页面:Crate集群的节点列表及每个节点的健康状况。

crate

Crate的不足

目前只是简单安装试用了一下,发现了几点不足:

  1. 不支持子查询;
  2. 不支持诸如CASE WHEN、IF ELSE的逻辑判断语法,特别是在聚合函数中;
  3. 内置的ElasticSearch版本太低;
  4. 没有和其他大数据组件的整合。

但它的查询性能还是很不错的,关键是SQL方便啊。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
SQL 存储 API
ES 实战复杂sql查询、修改字段类型
ES 实战复杂sql查询、修改字段类型
104 1
|
6月前
|
SQL 消息中间件 Oracle
Flink SQL 问题之写入ES报错如何解决
Flink SQL报错通常指在使用Apache Flink的SQL接口执行数据处理任务时遇到的问题;本合集将收集常见的Flink SQL报错情况及其解决方法,帮助用户迅速恢复数据处理流程。
103 4
|
SQL Java 数据库连接
如何安装ES的SQL插件?
如何安装ES的SQL插件?
309 0
|
SQL JSON Java
es应用笔记2-sql查询
es应用笔记2-sql查询
237 0
es应用笔记2-sql查询
|
流计算 索引
flink-sql入es报错:Missing required options are document-type
我是在flink-sql创建es表的时候报的错,报错提示缺少对应的options,及document-type ,我连忙去flink官方文档查找答案
406 0
flink-sql入es报错:Missing required options are document-type
|
SQL Web App开发 Java
十四、.net core(.NET 6)搭建ElasticSearch(ES)系列之给ElasticSearch添加SQL插件和浏览器插件
给ES添加SQL插件的方法:下载SQL插件地址:https://github.com/NLPchina/elasticsearch-sql当前最新的是7.12版本,我的ES是7.13版本,暂且将就用一下,也许能用呢?
271 0
十四、.net core(.NET 6)搭建ElasticSearch(ES)系列之给ElasticSearch添加SQL插件和浏览器插件
|
SQL 安全 前端开发
ES中SQL查询详解
ES中SQL查询详解
1120 0
ES中SQL查询详解
|
SQL 自然语言处理 Java
使用SQL替代DSL操作ES
有接触过大数据BI框架的同学应该都有类似的需求:项目需要对接不同类型的数据源(如:MYSQL、ES、HIVE等),并提供一个数据视图(View)用于用户编写 SQL,并将SQL执行结果转为对应报表项。
使用SQL替代DSL操作ES
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
115 13