目录
1.13 singleColumnValueExcludeFilter
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