【甘道夫】HBase(0.96以上版本)过滤器Filter详解及实例代码

说明:
本文参考官方 Ref Guide, Developer API和众多博客,并结合实测代码编写,详细总结HBase的Filter功能,并附上每类Filter的相应代码实现。
本文尽量遵从 Ref Guide中“9.4. Client Request Filters”的行文顺序,便于读者对比查看,但内容比官方文档更加详实。

***2014年7月18日更新,新增PageFilter和SkipFilter。***

欢迎转载,请注明来源:
http://blog.csdn.net/u010967382/article/details/37653177


目录:
引言 -- 参数基础
1. 结构(Structural)过滤器--FilterList
2.列值过滤器--SingleColumnValueFilter
        2.1.第一种构造函数情况 -- 比较的关键字是字符数组
        2.2.第二种构造函数情况 -- 比较的关键字是比较器ByteArrayComparable
3.键值元数据
        3.1. 基于列族过滤数据的FamilyFilter
        3.2. 基于限定符Qualifier(列)过滤数据的QualifierFilter
        3.3. 基于列名(即Qualifier)前缀过滤数据的ColumnPrefixFilter
        3.4. 基于多个列名(即Qualifier)前缀过滤数据的MultipleColumnPrefixFilter
        3.5. 基于列范围(不是行范围)过滤数据ColumnRangeFilter
4. RowKey
5. PageFilter
6. SkipFilter
7. Utility--FirstKeyOnlyFilter
8. 取得查询结果


引言 -- 参数基础
有两个参数类在各类Filter中经常出现,统一介绍下:
(1)比较运算符 CompareFilter.CompareOp
比较运算符用于定义比较关系,可以有以下几类值供选择:
  1. EQUAL                                  相等
  2. GREATER                              大于
  3. GREATER_OR_EQUAL           大于等于
  4. LESS                                      小于
  5. LESS_OR_EQUAL                  小于等于
  6. NOT_EQUAL                        不等于

(2)比较器  ByteArrayComparable
通过比较器可以实现多样化目标匹配效果,比较器 有以下子类可以使用:
  1. BinaryComparator               匹配完整字节数组 
  2. BinaryPrefixComparator     匹配字节数组前缀 
  3. BitComparator
  4. NullComparator
  5. RegexStringComparator    正则表达式匹配
  6. SubstringComparator        子串匹配


1. 结构(Structural)过滤器--FilterList
FilterList 代表一个 过滤器链 ,它可以包含一组即将应用于目标数据集的过滤器 ,过滤器间具有“与”   FilterList.Operator.MUST_PASS_ALL   和“或”  FilterList.Operator.MUST_PASS_ONE  关系。

官网实例代码, 两个 或” 关系的 过滤器 的写法:
FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);   //数据只要满足一组过滤器中的一个就可以
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my value")
);
list.add(filter1);
SingleColumnValueFilter filter2 = new SingleColumnValueFilter(
cf,
column,
CompareOp.EQUAL,
Bytes.toBytes("my other value")
);
list.add(filter2);
Scan scan = new Scan();
scan.setFilter(list);

2. 列值过滤器--SingleColumnValueFilter
SingleColumnValueFilter 用于测试 列值 相等 (CompareOp.EQUAL ), 不等 (CompareOp.NOT_EQUAL),或单侧范围 (e.g., CompareOp.GREATER)
构造函数:
(1)比较的关键字是一个字符数组
SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareFilter.CompareOp compareOp, byte[] value)
(2)比较的关键字是一个比较器(比较器下一小节做介绍)
SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareFilter.CompareOp compareOp,  ByteArrayComparable comparator)

2.1.第一种构造函数情况 -- 比较的关键字是字符数组
官网示例代码 检查列值和字符串'my value' 相等:
SingleColumnValueFilter filter = new SingleColumnValueFilter(
cf,
  • 10
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值