Filter 过滤器
HBase 过滤器主要分为三类:单元格过滤器、行键过滤器、列过滤器、装饰过滤器
单元格过滤器
ValueFilter 值过滤器
基于所有单元格的值来过滤数据,最终结果会包含通过过滤器的所有列的结果
new ValueFilter(CompareOperator, Comparable);
SingleColumnValueFilter 单列值过滤器
基于指定的列族、列的值来过滤数据
new SingleColumnValueFilter(family, column, CompareOperator, value);
new SingleColumnValueFilter(family, column, CompareOperator, ByteArrayComparable);
缺点:如果某行没有要比较的列,也会把改行数据包含到结果中,所以确保所有行都包含要比较的列,或者使用过滤器列表
TimestampsFilter 时间戳过滤器
精确地匹配指定的时间戳的记录
List<Long> list = new ArrayList<>();
list.add(1L);
list.add(5L);
new TimestampsFilter(list);
行键过滤器
RowFilter 行键过滤器
new RowFilter(CompareOperator, Comparable);
MultiRowRangeFilter 多行范围过滤器
指定多个行键范围进行搜索
new MultiRowRangeFilter(List<RowRange> list);
new RowRange(byte[] startRow, boolean startRowInclusive, byte[] stopRow, boolean stopRowInclusive);
PrefixFilter 行键前缀过滤器
new PrefixFilter(byte[] rowPrefix);
FuzzyRowFilter 模糊行键过滤器
new FuzzyRowFilter(List<Pair<byte[], byte[]>> pairs);
// 行键:输入需要匹配的关键字,需要模糊匹配的字符的位置,使用任意字符代替(一般使用 ?)
// 行键掩码:一个字节数组,长度与关键字的长度一致,在需要模糊匹配的字符的位置,填 1, 其他位置填 0
InclusiveStopFilter 包含结尾过滤器
new InlusiveStopFilter(byte[] rowKey);
RandomRowFilter 随机行过滤器
new RandomRowFilter(float chance);
// 扫描器在遍历数据时,会生成一个随机值,使用该随机值与chance 比较,如果小于 chance,该行会包含到最后的结果中。chance 的取值范围 0.0 ~ 1.0。如果 chance 为负数,则所有行都会被过滤掉,如果 chance 大于 1,则所有行都会包含在结果中
列过滤器
FamilyFilter 列族过滤器
new FamilyFilter(CompareOperator, Comparable);
QualifierFilter 列过滤器
new QulifierFilter(CompareOperator, Comparable);
DependentColumnFilter 依赖过滤器
指定一个列作为依赖列,以该依赖列的时间戳作为过滤条件,其他列的时间戳如果大于依赖列的时间戳就会被过滤掉
new DependentColumnFilter(byte[] family, byte[] column, boolean dropDependentColumn);
PrefixColumnFilter 列前缀过滤器
new PrefixColumnFilter(byte[] columnPrefix);
MultiColumnPrefixFilter 多列前缀过滤器
new MultiColumnPrefixFilter(byte[][]);
KeyOnlyFilter 列键过滤器
在遍历数据时,只获取列名,不获取值
new KeyOnlyFilter();
FirstKeyOnlyFilter 首次列检过滤器
在 KeyOnlyFilter
的基础上,每行只遍历到第一个列
new FirstKeyOnlyFilter();
ColumnRangeFilter 列名范围过滤器
new ColumnRangeFilter(byte[] minColumn, boolean minColumnInclusive, byte[] maxColumn, boolean maxColumnInclusive);
ColumnCountGetFilter 列数量过滤器
针对 Get 操作使用
new ColumnCountFilter(int count)
装饰过滤器
SkipFilter 跳转过滤器
当被包装的过滤器遇到一个需要过滤的KeyValue时,则整行都会被跳过
ValueFilter vFilter = new ValueFilter();
new SkipFilter(vFilter);
WhileMatchFilter 全匹配过滤器
包装一个过滤器,当被包装的一个过滤器遇到需要过滤的KeyValue 时,则整个扫描都会停止
CompareOperator 比较关系
LESS:小于
LEFF_OR_EQUAL:小于等于
EQUAL:等于
NOT_EQUAL:不等于
GREATER:大于
GREATER_EQUAL:大于等于
NO_OP:无操作
Comparable 比较器
SubstringComparator
判断目标字符串是否包含指定的字符串,与之搭配的比较关系为EQUAL
,NOT_EQUAL
BinaryComparator
判断目标值是否与指定的值相等或大于或小于,字符串
RegexStringComparator
使用正则表达式来匹配字符串,与之搭配的比较关系为EQUAL
NullComparator
空值比较器,与之搭配的比较关系为EQUAL
,NOT_EQUAL
LongComparator
数字比较器
BitComparator
比特位比较器
BinaryPrefixComparator
字节数组前缀比较器,比较出以指定字节数组开头的记录