SQL for ES
Posted 07H_JH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL for ES相关的知识,希望对你有一定的参考价值。
之前介绍过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,修改以下参数:
编辑$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命令行使用\\c 172.16.212.17:4200连接到Crate;
创建表
在Crate命令行使用下面的SQL语句创建表:
从外部批量加载数据
crate提供了一个COPY命令,用于从外部文本文件加载数据到表中,但只支持JSON格式的文本,比如:
JSON对象中的k需要和表的字段名称相同。
在Crate命令行使用COPY命令加载数据:
加载的速度还是非常快的。
SQL查询
可以从Crate官网上查看支持的SQL语法:https://crate.io/docs/reference/sql/dql.html
值得关注的是,Crate在做COUNT DISTINCT查询的时候,查出来的是真实去重后的数,没有误差,但查询响应时间要慢一些,有待研究。
Crate的监控界面
Crate提供了一个比较炫的监控界面,非常有用,Crate集群启动后,在浏览器输入:http://172.16.212.102:4200/admin/ 进入监控界面:
OverView页面:集群整体健康及负载状况。
Tables页面:Crate中所有Table及Schema的情况。
Cluster页面:Crate集群的节点列表及每个节点的健康状况。
Crate的不足
目前只是简单安装试用了一下,发现了几点不足:
- 不支持子查询;
- 不支持诸如CASE WHEN、IF ELSE的逻辑判断语法,特别是在聚合函数中;
- 内置的ElasticSearch版本太低;
- 没有和其他大数据组件的整合。
但它的查询性能还是很不错的,关键是SQL方便啊。
以上是关于SQL for ES的主要内容,如果未能解决你的问题,请参考以下文章
ES文件浏览器(清理垃圾神器, 强大网盘管理功能, 强大文件分析能力)
DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)
DB太大?一键帮你收缩所有DB文件大小(Shrink Files for All Databases in SQL Server)