博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HBase开发SQL查询中间件之查询原理
阅读量:4122 次
发布时间:2019-05-25

本文共 2150 字,大约阅读时间需要 7 分钟。

如何简化从hbase中查询数据

为了兼容以前从关系型中查询数据的接口, 让可以通过sql语句来查询其中的数据.

有这样的功能, 他支持通过类似sql语句的语法来操作hbase中的数据, 但是速度太慢了, 因为hive本身就不是用来查询数据的, hive是数据仓库, 做数据分析的, 不适合我们的应用场景.

hbase本身提供的api中, 只有scan是用来查询数据的, 因此我们需要将sql语句转成scan 参考<<>>发现是可行的

因此总体为

sql语句 --sql解析器--> sql语法节点(对象) -> scan -> hbase -> ResultScanner -> List

例如一个简单的sql语句

select a, b from table1 where a = 1 and b = 2

我们通过sql解析器可以得到sql语句的各个部分, 再调用hbase api中相应的语句来达到相同的效果

// 要查询的表HTable table = new HTable(conf, "table1");// 要查询的字段Scan scan = new Scan();scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("a"));scan.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("b"));// where条件// a = 1SingleColumnValueFilter a = new SingleColumnValueFilter(Bytes.toBytes("cf"),        Bytes.toBytes("a"), CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(1)));filterList.addFilter(filter);// b = 2SingleColumnValueFilter b = new SingleColumnValueFilter(Bytes.toBytes("cf"),        Bytes.toBytes("b"), CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(2)));// andFilterList filterList = new FilterList(Operator.MUST_PASS_ALL, a, b);scan.setFilter(filterList);

目前支持的功能

具体细节请参考单元

1. 从数据库中导入表数据到hbase

OracleDataLoader.loadTable("TABLE_NAME", new String[] {
"PK_COLUMN_NAME" });

2. 通过SQL语句来查询hbase中的表数据

List
rows = HbaseQuery.select("SQL");

目前支持的SQL语句


SELECT * FROM report1                       /* 查询所有数据 */SELECT A, B FROM report1                    /* 只查询某些列 */SELECT * FROM report1 WHERE A = 1 and B = 2 /* 过滤条件只能是AND逻辑, 而且是等于关系 */SELECT * FROM report1 limit 3 offset 2      /* 分页 */

如何使用

1. 在Download中下载最新版的hbase-sql.jar, 将其放在lib中.

注意项目lib的依赖
  • commons-beanutils-core-1.8.0.jar
  • commons-configuration-1.6.jar
  • commons-dbutils-1.5.jar
  • commons-lang-2.5.jar
  • commons-logging-1.1.1.jar
  • hadoop-core-1.0.4.jar
  • hbase-0.94.3.jar
  • jsqlparser-0.7.0.jar
  • log4j-1.2.16.jar
  • ojdbc14-10.2.0.5.jar
  • protobuf-java-2.4.0a.jar
  • slf4j-api-1.4.3.jar
  • slf4j-log4j12-1.4.3.jar
  • zookeeper-3.4.3.jar

2. 在项目的src中配置好hbase-site.xml, 否则无法连接到hbase来体验hbase-sql的功能

3. 测试

List
rows = new HbaseQueryImpl().select("select * from report1");System.out.println(rows.size());

TODO

支持更复杂的SQL查询语句

http://blog.csdn.net/nacey5201/article/details/17282669

你可能感兴趣的文章
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
OpenCV meanshift目标跟踪总结
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
Mysql复制表以及复制数据库
查看>>
Linux下SVN客户端使用教程
查看>>
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>