说明:
本文参考官方
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
比较运算符用于定义比较关系,可以有以下几类值供选择:
- EQUAL 相等
- GREATER 大于
- GREATER_OR_EQUAL 大于等于
- LESS 小于
- LESS_OR_EQUAL 小于等于
- NOT_EQUAL 不等于
(2)比较器 ByteArrayComparable
通过比较器可以实现多样化目标匹配效果,比较器
有以下子类可以使用:
- BinaryComparator 匹配完整字节数组
- BinaryPrefixComparator 匹配字节数组前缀
- BitComparator
- NullComparator
- RegexStringComparator 正则表达式匹配
- 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,