hbase 常用过滤器filter--------------------------有这篇文章就够了,舍我其谁!!!!

 

目录

1.1 过滤器的作用

1.2 rowkeyFilter

1.3 prefixfilter

1.4 firstKeyOnlyFilter

1.5 valueFilter

1.7 keyonlyFilter

1.8 randomRowFilter

1.9 inclusiveStopFilter

1.10 columnPrefixFilter

1.11 columnCountGetFilter

1.12 singleColumnValueFilter

1.13 singleColumnValueExcludeFilter

1.14 skipFilter

1.15 whileMatchFilter

1.16 filterList


1.1 过滤器的作用

过滤器可以根据列族、列、版本等更多的条件来对数据进行过滤,高效地完成查询过滤的任务,带有过滤器条件的RPC查询请求会把过滤器分发到各个 regionServer,达到降低网络传输压力的目的。通过提供一组过滤器,hBase可以对hBase中数据的多个维度进行筛选,最终筛选出来的数据能够细化到具体的一个存储单元格上。 通常来说,通过行键和值来筛选数据的应用场景较多,其中应用得比较多的过滤器包括RowFilter、PrefixFilter、FirstKeyOnlyFilter和ValueFilter。

1.2 rowkeyFilter

1. RowFilter:筛选出匹配的所有的行,对于这个过滤器的应用场景,是非常直观的,使用BinaryComparator可以筛选出具有某个行键的行,或者通过改变比较运算符来筛选出符合某一条件的多条数据,以下就是筛选出行键为row0的一行数据。

Filter mFilter = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("row0")));

1.3 prefixfilter

PrefixFilter:筛选出具有特定前缀的行键的数据,这个过滤器所实现的功能其实也可以由RowFilter结合RegexComparator来实现,不过这里提供了一种更为简便的方法,以下过滤器将筛选出行键以prefix为前缀的所有的行。

Filter mFilter = new PrefixFilter(Bytes.toBytes("prefix"));

1.4 firstKeyOnlyFilter

FirstKeyOnlyFilter:如果你只想返回的结果集中只包含第一列的数据,那么这个过滤器能够满足你的要求。它在找到每行的第一列之后会停止扫描,从而使扫描的性能也得到了一定的提升。

Filter mFilter = new FirstKeyOnlyFilter();

1.5 valueFilter

 ValueFilter:按照具体的值来筛选单元格的过滤器,这会把一行中值不能满足的单元格过滤掉,对于每一行的一个列,如果其对应的值不包含row_value,那么这个列将不会返回到客户端。

Filter mFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("row_value"));

1.7 keyonlyFilter

只返回每行的行健

Filter kof=new KeyOnlyFilter();//OK 返回所有的行,但值全是空

1.8 randomRowFilter

RandomRowFilter:按照一定的几率来返回随机的结果集
Filter rrf=new RandomRowFilter((float) 0.8);//OK随机选出一部分的行

1.9 inclusiveStopFilter

InclusiveStopFilter:扫描的时候,我们可以设置一个开始行键和一个终止行键,默认情况下,这个行键的返回是前闭后开区间,即包含起始行,但不包含终止行,如果我们想要同时包含起始行和终止行,使用inclusivestopfilter
Filter isf=new InclusiveStopFilter(Bytes.toBytes("row1"));//OK包含了扫描的上限在结果之内

1.10 columnPrefixFilter

ColumnsPrefixFilter:按照列名的前缀来筛选单元格,如果我们想要对返回的列的前缀加以限制的话,可以使用这个过滤器
Filter cpf=new ColumnPrefixFilter(Bytes.toBytes("qual1"));//OK筛选出前缀匹配的列

1.11 columnCountGetFilter

ColumnsCountGetFilter:这个过滤器来返回每行最多返回多少列,并在遇到一行的列数超过我们所设置的限制值的时候,结束扫描操作
Filter ccf=new ColumnCountGetFilter(2);//OK如果突然发现一行中的列数超过设定的最大值时,整个扫描操作会停止

1.12 singleColumnValueFilter

SingleColumnValueFilter:用一列的值决定这一行的数据是否被过滤
SingleColumnValueFilter scvf=new SingleColumnValueFilter(
Bytes.toBytes("colfam1"),
Bytes.toBytes("qual2"),CompareFilter.CompareOp.NOT_EQUAL,new SubstringComparator("BOGUS"));
scvf.setFilterIfMissing(false);
scvf.setLatestVersionOnly(true);//OK

1.13 singleColumnValueExcludeFilter

SingColumnValueExcludeFilter:这个与10种的过滤器唯一的区别就是,作为筛选条件的列的不会包含在返回的结果中。

1.14 skipFilter

SkipFilter:这是一种附加过滤器,其与ValueFilter结合使用,如果发现一行中的某一列不符合条件,那么整行就会被过滤掉
Filter skf=new SkipFilter(vf);//OK发现某一行中的一列需要过滤时,整个行就会被过滤掉

1.15 whileMatchFilter

WhileMatchFilter:如果你想要在遇到某种条件数据之前的数据时,就可以使用这个过滤器;当遇到不符合设定条件的数据的时候,整个扫描也就结束了
Filter wmf=new WhileMatchFilter(rf);//OK类似于Pythonitertools中的takewhile

 

1.16 filterList

List<Filter>filters=new ArrayList<Filter>();

filters.add(rf);
filters.add(vf);

或者:

FilterList fl=?new FilterList(FilterList.Operator.MUST_PASS_ALL,filters);//OK综合使用多个过滤器,AND和OR两种关系

除此以外,hBase还提供了FilterList用于综合使用多个过滤器,通过指定FilterList.Operator.MUST_PASS_ONE和FilterList.Operator.MUST_PASS_ALL,来分别设置必须通过所有过滤器或者仅需通过其中一个过滤器,FilterList可以嵌套使用FilterList,面对复杂的查询需求也能够得心应手。

http://www.sohu.com/a/208860675_505901

https://www.cnblogs.com/kaiwen03/p/9848037.html

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值