常见Filter的使用

以下内容参考自《HBase权威指南》 —— 代志远 刘佳 蒋杰 译

CompareFilter中的比较运算符

 

比较器(基于CompareFilter的过滤器提供的)

BinaryComparator,使用Bytes.compareTo()比较当前值与阈值

BinaryPrefixComparator,使用Bytes.compareTo()进行匹配,但是是从左端开始前缀匹配

NullComparator,不做匹配,只判断当前值是不是null

RegexStringComparator,根据一个正则表达式,在实例化这个比较器的时候去匹配表中的数据

SubstringComparator,把阈值和表中数据当做String实例,同时通过contains()操作匹配字符串

 

注意:最后两个比较器只能与EQUAL或NOT EQUALS使用

 

一、比较过滤器

1、行过滤器

行过滤器基于行键来过滤数据。

使用多种比较运算符来返回条件的行键,同时会过滤不符合条件的行键。

结果

2、列族过滤器

基于列族来过滤数据。

通过使用不同组合的运算符和比较器,用户可以在列族一级筛选所需的数据。

结果

3、列名过滤器

筛选特定的列

4、值过滤器

筛选某个特定值的单元格

结果

二、专用过滤器

1、单列值过滤器

用一列的值决定是否一行数据被过滤,首先设定待检查的列,然后设置待检查的列的对应值。

注意两个属性:filterIfMissing、LatestVersionOnly

前者决定了当参考列不存在时如何处理这一行。默认的这一行是被包含在结果中的,可以设置setFilterIfMissing(true)来过滤这些行,即所有不包含参考列的行后被过滤掉了。

后者默认为true,此时过滤器只检查参考列的最新版本,setLatestVersionOnly(false)之后会检查所有的版本。

结果

2、单列排除过滤器

该过滤器继承自单列值过滤器,经过扩展后提供一种略微不同的语意:参考列不被包含到结果中。

理解为:在单列值过滤器的基础上,排除掉满足条件的列,得到的结果就是单列排除过滤器得到的结果

结果(建议对比于上一个过滤器的结果)

3、前缀过滤器

在构造器中传入一个前缀,所有与前缀匹配的行都会被返回到客户端

public PrefixFilter(byte[] prefix)

扫描操作以字典序查找,当遇到比前缀大的行时,扫描操作就结束了。通过与起始行配合使用,过滤器的扫描性能大大提高,原因是当它发现后面的行不符合要求时会全部跳过。

结果:

三、FilterList

可以提供多个过滤器的共同限制,

 

三种构造器:

FilterList(List<Filter> rowFilters)

FilterList(Operator operator)

FilterList(Operator operator, List<Filter> rowFilters)

 

参数rowFilter以列表的形式组合过滤器参数operator决定了组合它们的结果。

操作

描述

MUST_PASS_ALL(默认)

当所有过滤器都允许包含这个值时,这个值才会被包含在结果中,也就是说没有过滤器会忽略这个值

MUST_PASS_ONE

只要有一个过滤器允许包括这个值,那这个值就会包含在结果中

 

虽然每个FilterList只能拥有一个操作符,但是FilterList可以包含FilterList,这样可以构造多级的过滤器。

 

可以通过控制List中过滤器的顺序来进一步精确地控制过滤器的执行顺序。

即在默认操作符下,可以将某个过滤器(能够过滤掉大部分行)放到开始位置,从而加快查询效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值