hbase 跳转过滤器skipfilter

用于跳过整个行键,需要和其他过滤器一起使用,本例SkipFilter和ValueFilter过滤器组合使用过滤不符合条件的行,

如果不配合SkipFiter,ValueFilter只过滤单元值包含的列。

    private static void skipFilterData() throws IOException{
        Table table = helper.getConnection().getTable(TableName.valueOf("demoTable"));
        Filter filter = new ValueFilter(CompareOperator.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("val2")));

        Scan scan = new Scan();
        scan.setFilter(filter);

        ResultScanner scanner1 = table.getScanner(scan);
        System.out.println("Results of scan #1:");
        int n = 0;
        for (Result result : scanner1) {
            for (Cell cell : result.rawCells()) {
                System.out.println("Cell: " + cell + ", Value: " +
                        Bytes.toString(cell.getValueArray(), cell.getValueOffset(),
                                cell.getValueLength()));
                n++;
            }
        }
        scanner1.close();

        //应用跳转过滤
        Filter skipFilter  = new SkipFilter(filter);
        Scan scan2 = new Scan();
        scan2.setFilter(skipFilter);
        ResultScanner scanner2 = table.getScanner(scan2);
        System.out.println("Total cell count for scan #1: " + n);
        n = 0;
        System.out.println("Results of scan #2:");
        for (Result result : scanner2) {
            for (Cell cell : result.rawCells()) {
                System.out.println("Cell: " + cell + ", Value: " +
                        Bytes.toString(cell.getValueArray(), cell.getValueOffset(),
                                cell.getValueLength()));
                n++;
            }
        }
        scanner2.close();
        System.out.println("Total cell count for scan #2: " + n);

    }

表中数据:

hbase(main):005:0> scan 'demoTable'
ROW                          COLUMN+CELL                                                                      
 row1                        column=cf1:qual1, timestamp=5, value=row1_batch1                                 
 row1                        column=cf1:qual2, timestamp=2, value=val2                                        
 row1                        column=cf1:qual3, timestamp=3, value=val3                                        
 row1                        column=cf2:qual1, timestamp=1, value=val1                                        
 row1                        column=cf2:qual2, timestamp=5, value=row1_batch2                                 
 row1                        column=cf2:qual3, timestamp=3, value=val3                                        
 row2                        column=cf1:qual1, timestamp=1, value=val1                                        
 row2                        column=cf1:qual3, timestamp=3, value=val3                                        
 row2                        column=cf2:qual1, timestamp=1, value=val1                                        
 row2                        column=cf2:qual2, timestamp=2, value=val2                                        
 row2                        column=cf2:qual3, timestamp=3, value=val3                                        
 row3                        column=cf1:qual1, timestamp=1, value=value1  

输出结果:ValueFilter过滤只过滤某个Cell,配合SkipFilter过滤了整行数据

Cell: row1/cf1:qual1/5/Put/vlen=11/seqid=0, Value: row1_batch1
Cell: row1/cf1:qual3/3/Put/vlen=4/seqid=0, Value: val3
Cell: row1/cf2:qual1/1/Put/vlen=4/seqid=0, Value: val1
Cell: row1/cf2:qual2/5/Put/vlen=11/seqid=0, Value: row1_batch2
Cell: row1/cf2:qual3/3/Put/vlen=4/seqid=0, Value: val3
Cell: row2/cf1:qual1/1/Put/vlen=4/seqid=0, Value: val1
Cell: row2/cf1:qual3/3/Put/vlen=4/seqid=0, Value: val3
Cell: row2/cf2:qual1/1/Put/vlen=4/seqid=0, Value: val1
Cell: row2/cf2:qual3/3/Put/vlen=4/seqid=0, Value: val3
Cell: row3/cf1:qual1/1/Put/vlen=6/seqid=0, Value: value1
Total cell count for scan #1: 10
Results of scan #2:
Cell: row3/cf1:qual1/1/Put/vlen=6/seqid=0, Value: value1
Total cell count for scan #2: 1

 

转载于:https://www.cnblogs.com/asker009/p/10701932.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值