hbase-sql
最近在做一个hbase proxy的的项目,字面意思是hbase代理,其实就是将对hbase数据操作的都经过这个系统进行转发,实现对hbase的代理,由这个系统提供接口对外,该项目中涉及了很多对HBase进行查询和插入的操作,但是随着需求不但增加,每新增一个需求,就要根据需求使用HBase API来开发来完成相应功能的开发。有没有一种办法只是通过配置的方法就可以实现对hbase的相关操作(增删改查),从而减少代码的开发呢?
hbase-sql是一个基于sql语句,并将sql转化为hbase scan/put/delete操作的工具,对于开发人员,只要编写SQL语句就能实现对hbase的操作,以减少学习和开发成本。
hbase-sql原理
将sql语句通过sql解析器进行解析,获取sql语法节点,然后转换为hbase scan/put/delete等对象,最终调用HBase原生的API进行查询操作
hbase-sql实现了使用select,del,insert完成对hbase数据库的查找,删除,插入等操作。
select 查询
1 2 3 4 5 6 7 | // 获取所有列 select * from user // 获取rowkey为11111 select * from user where _rowkey_=11111 // 查询info列族中的age列 select info.age from user where _pre_rowkey_ = 11 select * from user where _rowkey_ in ('1111', '2222') |
java实现如下:
1 2 3 4 | HBaseSqlEngine sqlEngine = new HBaseSqlEngineImpl(); String sql = "select * from user where _rowkey_=1111"; sqlEngine.select(sql); |
del 删除数据
支持删除指定rowkey行的数据,支持删除指定行中某列族中的某个或多个列的数据
1 2 3 4 | // 删除指定行数据 delete from user where _rowkey_=1111 // 删除指定指定行的某个列数据 delete from user where _rowkey_ in ('111','22232','3333') and _column_ in ('info.name', 'info.age') |
java实现如下:
1 2 3 | HBaseSqlEngine sqlEngine = new HBaseSqlEngineImpl(); String s = "delete from user where _rowkey_ in ('111','22232','3333') and _column_ in ('info.name', 'info.age')"; sqlEngine.del(s); |
insert 插入数据
类似sql insert插入数据的方法,这里需要注意的是,需要插入rowkey,插入数据可以指定插入到某个列族中某个列。
1
| insert into user (_rowkey_, info.name, info.age) values ('rk-1', '张三', 12)
|
java实现如下:
1 2 3 | HBaseSqlEngine sqlEngine = new HBaseSqlEngineImpl(); String s = "insert into user (_rowkey_, info.name, info.age) values ('sdfdsfsd', 'fdsfsd', 12)"; sqlEngine.insert(s); |
ps:欢迎有兴趣的朋友一起交流学习~ > 传送门