1. 跳转过滤器(SkipFilter)
该过滤器包含了一个用户提供 过滤器,当被包装的过滤器遇到一个需要过滤的KeyValue实例时,用户可以过滤整行数据。当过滤器发现某一行中的一列需要过滤时,那么整行数据都将被过滤掉。例如:SkipFilter与ValueFilter组合起来获取不包含空列值得行。
public void skipFilter() throws IOException{
Filter filter1 = new ValueFilter(CompareFilter.CompareOp.NOT_EQUAL,
new BinaryComparator(Bytes.toBytes("hunan")));
Scan scan = new Scan();
scan.setFilter(filter1);
ResultScanner scanner1 = table.getScanner(scan);
for(Result res : scanner1){
for(KeyValue kv: res.raw())
System.out.println("KV1: "+kv+",value: "+Bytes.toString(kv.getValue()));
}
scanner1.close();
Filter filter2 = new SkipFilter(filter1);
scan.setFilter(filter2);
ResultScanner scanner2 = table.getScanner(scan);
for(Result res : scanner2){
for(KeyValue kv: res.raw())
System.out.println("KV2: "+kv+",value: "+Bytes.toString(kv.getValue()));
}
scanner2.close();
}
2. 全匹配过滤器(WhileMatchFilter)
当遇到一条数据被过滤时,它就会放弃后面的扫描。使用封装的过滤器来检查KeyValue,并确认是否一行数据因行键或是列被跳过而过滤。
public void WhileMatchFilter() throws IOException{
Filter filter1 = new RowFilter(CompareFilter.CompareOp.NOT_EQUAL,
new BinaryComparator(Bytes.toBytes("3103")));
Scan scan = new Scan();
scan.setFilter(filter1);
ResultScanner scanner1 = table.getScanner(scan);
for(Result res : scanner1){
for(KeyValue kv: res.raw())
System.out.println("KV1: "+kv+",value: "+Bytes.toString(kv.getValue()));
}
scanner1.close();
Filter filter2 = new WhileMatchFilter(filter1);
scan.setFilter(filter2);
ResultScanner scanner2 = table.getScanner(scan);
for(Result res : scanner2){
for(KeyValue kv: res.raw())
System.out.println("KV2: "+kv+",value: "+Bytes.toString(kv.getValue()));
}
scanner2.close();
}