Home  >  Article  >  Database  >  HBase条件查询(多条件查询)

HBase条件查询(多条件查询)

WBOY
WBOYOriginal
2016-06-07 17:27:221489browse

文中可能涉及到的API: Hadoop/HDFS:http://hadoop.apache.org/common/docs/current/api/ HBase: http://hbase.apache.org/apido

文中可能涉及到的API:

Hadoop/HDFS:

HBase: ?overview-summary.html

Begin!

HBase的查询实现只提供两种方式:

1、按指定RowKey获取唯一一条记录,get方法(org.apache.hadoop.hbase.client.Get)

2、按指定的条件获取一批记录,scan方法(org.apache.hadoop.hbase.client.Scan)

 

实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:

1、scan可以通过setCaching与setBatch方法提高速度(以空间换时间);

2、scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。

通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。

3、scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。

 

下面举个形象的例子:

我们在表中存储的是文件信息,每个文件有5个属性:文件id(long,全局唯一)、创建时间(long)、文件名(String)、分类名(String)、所有者(User)。

我们可以输入的查询条件:文件创建时间区间(比如从20120901到20120914期间创建的文件),,文件名(“中国好声音”),分类(“综艺”),所有者(“浙江卫视”)。

假设当前我们一共有如下文件:

内容列表

IDCreateTimeNameCategoryUserID

1 20120902 中国好声音第1期 综艺 1

2 20120904 中国好声音第2期 综艺 1

3 20120906 中国好声音外卡赛 综艺 1

4 20120908 中国好声音第3期 综艺 1

5 20120910 中国好声音第4期 综艺 1

6 20120912 中国好声音选手采访 综艺花絮 2

7 20120914 中国好声音第5期 综艺 1

8 20120916 中国好声音录制花絮 综艺花絮 2

9 20120918 张玮独家专访 花絮 3

10 20120920 加多宝凉茶广告 综艺广告 4

 

 

 

这里UserID应该对应另一张User表,暂不列出。我们只需知道UserID的含义:

1代表 浙江卫视; 2代表 好声音剧组; 3代表 XX微博; 4代表 赞助商。
调用查询接口的时候将上述5个条件同时输入find(20120901,20121001,"中国好声音","综艺","浙江卫视")。

此时我们应该得到记录应该有第1、2、3、4、5、7条。第6条由于不属于“浙江卫视”应该不被选中。

我们在设计RowKey时可以这样做:采用UserID + CreateTime + FileID组成rowKey,这样既能满足多条件查询,又能有很快的查询速度。

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Oracle体系结构概述Next article:Oracle控制文件的内容