HBase 过滤器

813 阅读3分钟

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

判断目标字符串是否包含指定的字符串,与之搭配的比较关系为EQUALNOT_EQUAL

BinaryComparator

判断目标值是否与指定的值相等或大于或小于,字符串

RegexStringComparator

使用正则表达式来匹配字符串,与之搭配的比较关系为EQUAL

NullComparator

空值比较器,与之搭配的比较关系为EQUALNOT_EQUAL

LongComparator

数字比较器

BitComparator

比特位比较器

BinaryPrefixComparator

字节数组前缀比较器,比较出以指定字节数组开头的记录