java过滤器api_HBase内置过滤器java api的总结

1、RowFilter:筛选出匹配的所有的行(使用过)

//rowkey 等于 test|id9

Filter filter=new RowFilter(CompareOperator.EQUAL,new BinaryComparator(Bytes.toBytes("test|id9")));

2、PrefixFilter:筛选出具有特定前缀的行健的数据

//rowkey 以test开头

Filter filter=new PrefixFilter(Bytes.toBytes("test"));

3、KeyOnlyFilter:只返回每行的行健

//只返回每行的行键,但值全是空

Filter filter=new KeyOnlyFilter();

4、RandomRowFilter:按照一定的几率来返回随机的结果集

//返回随机的数据

Filter filter=new RandomRowFilter(0.5f);

5、InclusiveStopFilter:扫描的时候,我们可以设置一个开始行键和一个终止行键,默认情况下,这个行键的返回是前闭后开区间,即包含起始行,但不包含终止行,如果我们想要同时包含起始行和终止行

//遇到rowkey等于test|id4停止查询

Filter filter=new InclusiveStopFilter(Bytes.toBytes("test|id4"));

6、FirsterKeyOnlyFilter:返回的结果集中只包含第一列的数据它在找到每行的第一列之后会停止扫描

//筛选出第一个每个第一个单元格

Filter filter=new FirstKeyOnlyFilter();

7、ColumnsPrefixFilter:按照列名的前缀来筛选单元格,如果我们想要对返回的列的前缀加以限制的话,可以使用这个过滤器

//列名以ss开头

Filter filter=new ColumnPrefixFilter(Bytes.toBytes("ss"));

8、ValueFilter:按照具体的值来筛选单元格

//值中包含one的记录

Filter filter=new ValueFilter(CompareOperator.EQUAL,new SubstringComparator("one"));

9、ColumnsCountGetFilter:这个过滤器来返回每行最多返回多少列,并在遇到一行的列数超过我们所设置的限制值的时候,结束扫描操作

Filter ccf=new ColumnCountGetFilter(2);//OK如果突然发现一行中的列数超过设定的最大值时,整个扫描操作会停止

10、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

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

12、SkipFilter:这是一种附加过滤器,其与ValueFilter结合使用,如果发现一行中的某一列不符合条件,那么整行就会被过滤掉

Filter skf=new SkipFilter(vf);//OK发现某一行中的一列需要过滤时,整个行就会被过滤掉

13、WhileMatchFilter:如果你想要在遇到某种条件数据之前的数据时,就可以使用这个过滤器;当遇到不符合设定条件的数据的时候,整个扫描也就结束了

Filter wmf=new WhileMatchFilter(rf);//OK类似于Pythonitertools中的takewhile

14、FilterList:用于综合使用多个过滤器(使用过)

Listfilters=new ArrayList();filters.add(rf);

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

通过Filter获取结果集案例

FilterList filterList=new FilterList();

Filter filter=new RowFilter(CompareOperator.EQUAL,new BinaryComparator(Bytes.toBytes("test|id9")));

filterList.addFilter(filter);

ResultScanner www = HBaseUtil.getScanner("www",filterList);

for (Result re:www){

for(Cell kv:re.rawCells()){

System.out.println("====="+kv.toString());

System.out.println("列族:"+Bytes.toString(kv.getFamilyArray(),kv.getFamilyOffset(),kv.getFamilyLength()));

System.out.println("RowKey:"+Bytes.toString(kv.getRowArray(),kv.getRowOffset(),kv.getRowLength()));

System.out.println("列名:"+Bytes.toString(kv.getQualifierArray(),kv.getQualifierOffset(),kv.getQualifierLength()));

System.out.println("值:"+Bytes.toString(kv.getValueArray(),kv.getValueOffset(),kv.getValueLength()));

System.out.println("=================================================================================");

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值