如何简化从hbase中查询数据

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

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

hbase本身提供的api中, 只有scan是用来查询数据的, 因此我们需要将sql语句转成scan 参考<<利用hbase的coprocessor机制来在hbase上增加sql解析引擎–(一)原因&架构>>发现是可行的

因此总体架构为

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

例如一个简单的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 = 1
SingleColumnValueFilter a = new SingleColumnValueFilter(Bytes.toBytes("cf"),Bytes.toBytes("a"), CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(1)));
filterList.addFilter(filter);
// b = 2
SingleColumnValueFilter b = new SingleColumnValueFilter(Bytes.toBytes("cf"),Bytes.toBytes("b"), CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(2)));
// and
FilterList filterList = new FilterList(Operator.MUST_PASS_ALL, a, b);
scan.setFilter(filterList);

目前支持的功能

具体细节请参考单元测试

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

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

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

List<DynaBean> 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的依赖

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

3. 测试

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

TODO

支持更复杂的SQL查询语句

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

HBase开发SQL查询中间件之查询原理相关推荐

  1. 数据库原理与应用(SQL Server)笔记 第四章 嵌套查询和其他查询子句

    目录 前言 一.嵌套查询 (一)子查询 (二)ANY或ALL谓词的子查询和比较运算的子查询 1.ANY子查询 2.ALL子查询 (三)EXISTS子查询 二.其他查询子句(集合查询) (一)UNION ...

  2. c mysql查询年月日_mysql查询指定日期时间内的sql语句及原理

    查询指定日期时间内的sql语句的实现原理: 如果是月份就是当前的月减去你要统计的时间,比如要查询数据库中从今天起往前三个月的所有记录. 另外,在数据库设计阶段,要注意时间字段为int(11),保存在数 ...

  3. Student学生表(学号,姓名、性别、年龄、组织部门),Course 课程表(编号,课程名称),Sc选课表(学号,课程编号,成绩) a、写一个SQL语句,查询选修了计算机原理的学生学号和姓

    Student学生表(学号,姓名.性别.年龄.组织部门),Course 课程表(编号,课程名称),Sc选课表(学号,课程编号,成绩) a.写一个SQL语句,查询选修了计算机原理的学生学号和姓名 sel ...

  4. JSP双语字典查询系统myeclipse开发sql数据库bs框架java编程web网页结构

    一.源码特点      JSP 双语字典查询系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发.开发环境为 TOMCAT ...

  5. SQL注入原理及实践(一)--SQL注入之联合查询

    SQL注入原理及实践(一)–SQL注入之联合查询 1)判断注入类型 一般采用[1and1=2]去判断,当输入[1and1=2]时, 如果报错,则为数字型注入, 如果显示正常,则为字符型注入 原理如下: ...

  6. oracle sql 全是子查询查询速度太慢如何优化_如果面试官问你如何优化mysql分页查询,请把这篇文章甩给他!...

    在我们日常开发中,分页查询是必不可少的,可以说每干后端程序猿大部分时间都是CURD,所以分页的查询也接触的不少,你们都是怎么实现的呢?前不久的一段时间,我的一个同事突然找我寻求帮助,他说他写的sql查 ...

  7. hbase查询性对比 mysql_查询MYSQL和查询HBASE速度比较

    上一篇文章:我要上谷歌 Mysql,关系型数据库: HBase,NoSql数据库. 查询Mysql和查询HBase,到底哪个速度快呢? 与一些真正的大牛讨论时,他们说HBase写入速度,可以达到每秒1 ...

  8. ES 查询数据的工作原理是什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/GsAa 面试题 ...

  9. SQL Server查询优化方法(查询速度慢的原因很多,常见如下几种)

    1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)  2.I/O吞吐量小,形成了瓶颈效应.  3.没有创建计算列导致查询不优化.  4.内存不足  5.网络速度慢  6.查询出的 ...

最新文章

  1. 121-Best Time to Buy and Sell Stock
  2. 良田高拍仪集成vue项目
  3. git merge 和 git rebase详解
  4. boost::array用法的测试程序
  5. 「Sqlserver」数据分析师有理由爱Sqlserver-好用的插件工具推荐
  6. numpy产生一个大于0的随机数_Numpy中常用随机函数的总结
  7. 计算机网络工程教程:基于cisco路由器和交换机,计算机网络工程教程—基于cisco路由器和交换机教学课件作者陆魁军chap7思科路由器的高级功能.ppt...
  8. 分布式专题(1)- 计算机网络
  9. 小学生python游戏编程arcade----动画图片实现爆炸效果
  10. 模具设计:模具做的好,镶件也要镶得好!
  11. 逻辑运算符与位运算符的区别
  12. 解决方法数超65536(java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536)
  13. 我们更需要指数型的AB产品(长盛同庆、基金瑞福)
  14. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛H题小Y与多米诺骨牌(线段树优化dp)
  15. 大三时候看了这份路线,进阿里了,进大厂保姆教程,收藏起来
  16. 基于Vue2使用Vuex3
  17. Python的对象和类型
  18. Asp.net 实现验证码功能的Web控件
  19. 《博弈论》欧几里德的游戏
  20. 好莱坞著名影星Brooke Shields联合Casper推出全球首款在太空铸造的NFT作品

热门文章

  1. 3DMAX渲染出来的图为什么是黑色的?
  2. Android Studio连接模拟器操作
  3. google 兼容测试_手机端设置
  4. springboot:java实现邮件及附件发送、HTML正文的三种方式(一)【附带源码】
  5. RTK-RTD-SBAS-WAAS-PPP-PPK-WADGPS
  6. Android获取桌面启动图标的位置
  7. 高低穿,PEA, 4105
  8. Python+微信小程序开发(四)页面跳转和获取用户信息
  9. 学习 canvas (七)实现圆球水波进度
  10. html语言密码框,HTML表单密码框INPUT标签