hbase filter类型

Hbase提供的Filters有: 
  
Ⅰ. Comparison Filters  
  
Compartison Filters是基于比较的过滤器。定义如下: 
  
CompareFilter(CompareOp    valueCompareOp,WritableByteArrayComparable valueComparator) 
  
该构造器有两个特定的参数,一个是比较运算符,另一个是比较器。 
  
A、常见的比较运算符有: 
  
LESS,LESS_OR_EQUAL,EQUAL,NOT_EQUAL,GREATER_OR_EQUAL,GREATER,NO_OP。前面几个运算符根据名字定义就能判断其意思,最后一个是NO_OP,表示排除任何数据。 
  
B、常见的比较器有:其中NullComparator是判断给定的值是否为空或者非空。最后三个比较器只能搭配使用EQUAL,NOT_EQUAL比较运算符,返回0表示匹配,1表示不匹配。 
  
      BinaryComparator 
  
      BinaryPrefixComparator 
  
      NullComparator 
  
      BitComparator 
  
      RegexStringComparator 
  
      SubstringComparator 
  
C、基于Comparison Filter的过滤器有好多种,比如: 
  
      1、RowFilter 
  
      2、FamilyFilter 
  
      3、QualifierFilter 
  
      4、ValueFilter 
  
      5、DependentColumnFilter 
  
(1)   RowFilter过滤器顾名思义就是根据RowKey来过滤数据。所以RowFilter中的比较运算符和比较器参数都是基于RowKey来比较的。比如如下Filter表示RowKey包含-4的数据。 
  
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator("-4"))。 
  
(2)   FamilyFilter过滤器跟RowFilter类似,不过FamilyFilter是基于ColumnFamily的比较。 
  
QualifierFilter和ValueFilter过滤器也类似,分别是基于列和数值的比较。 
  
(3) DependentColumnFilter过滤器稍微复杂一点。它可以说是timeStamp Filter和ValueFilter的结合。因为DependentColumnFilter需要指定一个参考列,然后获取跟改参考列有相同时间戳的所有列,再在此基础上获取满足ValueFilter的列值。构造函数如下:用户可以根据自己喜好省略valueFilter或者通过设置dropDependentColumn为true省略timestamp Filter。不过需要注意的是:此过滤器不能跟Scan中的Batch操作结合使用。 
  
A、DependentColumnFilter(byte[] family, byte[] qualifier) 
  
B、DependentColumnFilter(byte[] family, byte[] qualifier,boolean dropDependentColumn) 
  
C、DependentColumnFilter(byte[] family, byte[] qualifier,boolean dropDependentColumn, CompareOp valueCompareOp,WritableByteArrayComparable valueComparator) 
  
  
Ⅱ. Dedicated Filters  
  
专有的一些过滤器,Hbase提供了许多个性化的专有过滤器。常见的Dedicated Filters有: 
  
A、SingleColumnValueFilter 
  
B、SingleColumnValueExcludeFilter 
  
C、PrefixFilter 
  
D、PageFilter 
  
E、KeyOnlyFilter 
  
F、FirstKeyOnlyFilter 
  
G、InclusiveStopFilter 
  
H、TimestampsFilter 
  
I、ColumnCountGetFilter 
  
J、ColumnPaginationFilter 
  
K、ColumnPrefixFilter 
  
L、RandomRowFilter 
  
(1)   如果你想分页获取数据,可以通过PageFilter来完成。ColumnPaginationFilter跟PageFilter类似,只不过PageFilter是基于行的分页,而ColumnPaginationFilter是基于列的分页。如: 
  
ColumnPaginationFilter(int limit, int offset),表示获取从offset列开始的连续limit列的数据。 
  
(2) 如果只想获取每一行的第一列的值,那么FirstKeyOnlyFilter是不错的选择。此外,因为前面提到的Scan操作需要用户指定一个startRow和EndRow,其中这两个参数时左闭右开区间的。如果想EndRow也包含,可以通过InclusiveStopFilter来解决。如下:获取从Row5至Row10的数据 
  
。不过因为Hbase是字典排序的,所以得到的结果中可能会包含Row51,Row52等这些行的数据。 
  
Filter filter = new InclusiveStopFilter(Bytes.toBytes("row-9")); 
  
Scan scan = new Scan(); 
  
scan.setStartRow(Bytes.toBytes("row-5")); 
  
scan.setFilter(filter); 
  
ResultScanner scanner = table.getScanner(scan); 
  
(3) 如果想获取某个版本的所有数据。可以通过TimestampsFilter来设置,用户需要传入版本号。如下: 
  
TimestampsFilter(List timestamps) 
  
(4) PrefixFilter和ColumnPrefixFilter都是基于前缀的过滤器,不过PrefixFilter是基于行的前缀过滤,而后者是基于列的前缀过滤。 
  
(5) RandomRowFilter是基于随机行的过滤器,用户需要指定一个在0到1之间的随机数,构造函数如下:如果chance大于1,则会返回所有行。如果小于0,则过滤掉所有行。 
  
RandomRowFilter(float chance) 
  
  
Ⅲ. Decorating Filters  
  
Decorating Filters称为装饰型的过滤器。它的作用是为其他过滤器返回的结果提供一些附加的校验操作。常见的Decorating Filters有: 
  
A、SkipFilter 
  
B、WhileMatchFilter 
  
(1)   SkipFilter包装了其它的过滤器,只要被包装的过滤器返回的结果中有一行的某一列或者某个KeyValue被过滤掉了,那么SkipFilter会将该列或者KeyValue所处的整行全部过滤。被包装的过滤器必须实现filterKeyValue()方法。因为SkipFilter会依靠filterKeyValue()返回的结果进行附加的处理。比如: 
  
Filter filter = new ValueFilter(CompareFilter.CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("val-1"))); 
  
上面这样一个filter,表示返回的结果中值不能等于val-1,这样值为val-1的那个列就不会展示,但该行的其他列只要满足值不等于val-1都会返回。 
  
不过一旦使用了SkipFilter,如:Filter filter2 = new SkipFilter(filter);只要存在某一行中的某个列的值等于val-1,那么该行的所有数据都不会返回。 
  
(2)   WhileMatchFilter跟SkipFilter类似,不过区别之处在于WhileMatchFilter一旦找到某一行中的某些列值或者KeyValue不满足条件,那么整个Scan操作就会被终止。SkipFilter只是会将此行过滤,不作为返回值,但Scan操作会继续。 
  
  
Ⅳ. Custom Filters  
  
如果想实现自定义的Filter,可以实现Filter接口或者扩展FilterBase类。FilterBase类提供了基本的Filter实现。 
  
如果用户想在一次检索数据的过程中使用多个Filter,那么可以使用FilterList特性。其构造函数如下: 
  
FilterList(List rowFilters) 
  
FilterList(Operator operator) 
  
FilterList(Operator operator, List rowFilters) 
  
其参数operator其枚举值有两个:MUST_PASS_ALL(表示返回的结果集数据必须通过所有过滤器的过滤),MUST_PASS_ONE(表示返回的结果集数据只要通过了其中一个过滤器就行)。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值