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,修改以下参数:


  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命令行使用\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命令加载数据:

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

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的不足

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

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

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

时间: 2024-09-13 14:49:35

SQL for ES的相关文章

学习oracle sql loader 的使用

oracle 学习oracle sql loader 的使用 一:sql loader 的特点oracle自己带了很多的工具可以用来进行数据的迁移.备份和恢复等工作.但是每个工具都有自己的特点. 比如说exp和imp可以对数据库中的数据进行导出和导出的工作,是一种很好的数据库备份和恢复的工具,因此主要用在数据库的热备份和恢复方面.有着速度快,使用简单,快捷的优点:同时也有一些缺点,比如在不同版本数据库之间的导出.导入的过程之中,总会出现这样或者那样的问题,这个也许是oracle公司自己产品的兼容

Oracle中sql loader使用例子

一.SQLLoader将 Excel 数据导出到 Oracle 1.创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑: 控制文件:input.ctl,内容如下: load data --1.控制文件标识 infile 'test.txt' --2.要输入的数据文件名为test.txt append into table test --3.向表test中追加记录 fields terminated by X'09' --4.字段终止于X'09',是一个制表符(TAB) (

Oracle sql loader使用例子

一.SQLLoader将 Excel 数据导出到 Oracle 1.创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑: 控制文件:input.ctl,内容如下: load data --1.控制文件标识 infile 'test.txt' --2.要输入的数据文件名为test.txt append into table test --3.向表test中追加记录 fields terminated by X'09' --4.字段终止于X'09',是一个制表符(TAB) (

使用MyDBase连接SQL Server

  使用ADO.NET自定义类MyDBase连接SQL Server数据库 using System; using System.Data; using System.Data.SqlClient; public class MyDBase { bool ECode=false; string ES; SqlConnection cn=new System.Data.SqlClient.SqlConnection(); DataSet Rs; public MyDBase(string MyDB

SQL Server大型服务器:伸缩性、可用性与易管理性

简介 随着电子商务.在线商务应用.商务智能等领域的迅猛发展,许多成功的企业都在对其在线应用进行扩展.目前,每一个Internet或企业内部网络用户都是一个潜在的客户,因此,应用面临着巨大的用户和事务负载.绝大多数企业都在建立大型服务器,以便管理数以吉计的信息并为数以百万的客户和用户提供支持.在此过程中,数据库系统已成为这些大型服务器的核心. 可伸缩式系统为您提供了一种通过添加更多硬件设备的简单方式来扩展网络.服务器.数据库及应用程序的途径.可伸缩式计算机系统可在无需修改应用程序代码的情况下扩大应

PostgreSQL SQL 语言:全文搜索

本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权.1. 介绍 全文搜索(或者文本搜索)提供了确定满足一个查询的自然语言文档的能力,并可以选择将它们按照与查询的相关度排序.最常用的搜索类型是找到所有包含给定查询词的文档并按照它们与查询的相似性顺序返回它们.查询和相似性的概念非常灵活并且依赖于特定的应用.最简单的搜索认为查询是一组词而相似性是查询词在文档中的频度. 文本搜索操作符已经在数据库中存在很多年了.PostgreSQL对文本数据类型提供了~.~*.LIKE和ILIK

关于一个用户SQL慢查询问题的分析及优化

问题描述 一个用户反映先前一个SQL语句执行时间慢得无法接受.SQL语句看上去很简单(本文描述中修改了表名和字段名): SELECT count(*) FROM a JOIN b ON a.`S` = b.`S` WHERE a.`L` > '2014-03-30 00:55:00′ AND a.`L` < '2014-03-30 01:00:00′ ; 且查询需要的字段都建了索引,表结构如下: CREATE TABLE `a` ( `L` timestamp NOT NULL DEFAULT

sql server-关于SQL Server的有哪位大神能说说吗?

问题描述 关于SQL Server的有哪位大神能说说吗? 关于SQL Server的有哪位大神能说说吗?SQL Server怎么换皮肤? 解决方案 382. Speech is silver, silence is gold. 能说是银,沉默是金SQL Server 2005:向系统表说再见例说SQL Server 2012 数学函数 解决方案二: SQL SERVER不能换皮肤 解决方案三: 管理器本身不支持换主题的功能,你只能通过修改配色方案实现,网上有些现成的配置你可以导入.但我觉得效果不

es同步数据-Elasticsearch使用elasticsearch-river-jdbc插件操作Mysql遇到的问题。

问题描述 Elasticsearch使用elasticsearch-river-jdbc插件操作Mysql遇到的问题. 我用elasticsearch-river-jdbc添加了一个mysql的数据源.代码如下:curl -XPUT 'localhost:9200/_river/bankinfo/_meta' -d '{strategy"" : ""simple""interval"" : 0flush_interval&qu