3.1 SkipFilter
这个过滤器只作用到ValueFilter上。ValueFilter会返回所有满足条件的row及对应的列。而加上SkipFilter以后。会发现如果某一行的某一列不符合条件,则这一行全部不返回了。
package filter;
import java.io.IOException;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.SkipFilter;
import org.apache.hadoop.hbase.filter.ValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
public class SkipFilterExample extends FilterExampleBase {
public static void main(String[] args) throws IOException {
new SkipFilterExample().doMain();
}
public void testFilter() throws IOException {
Filter filter1 = new ValueFilter(CompareFilter.CompareOp.NOT_EQUAL,
new BinaryComparator(Bytes.toBytes("c1a")));
Scan scan = new Scan();
scan.setFilter(filter1);
ResultScanner scanner1 = table.getScanner(scan);
System.out.println("Results of scan #1:");
int n = 0;
for (Result result : scanner1) {
for (KeyValue kv : result.raw()) {
System.out.println("KV: " + kv + ", Value: " + Bytes.toString(kv.getValue()));
n++;
}
}
scanner1.close();
System.out.println("Total KeyValue count for scan #1: " + n);
Filter filter2 = new SkipFilter(filter1);
scan.setFilter(filter2);
ResultScanner scanner2 = table.getScanner(scan);
n = 0;
System.out.println("Results of scan #2:");
for (Result result : scanner2) {
for (KeyValue kv : result.raw()) {
System.out.println("KV: " + kv + ", Value: " + Bytes.toString(kv.getValue()));
n++;
}
}
scanner2.close();
System.out.println("Total KeyValue count for scan #2: " + n);
}
}
结果:
start create table......
test is exist delete!!!
create table over......
start insert......
end insert......
-----------------findAll() start-------------
{rowkey:r1 c1:a=r1c1a c1:b=r1c1b c2:a=r1c2a c2:b=r1c2b}
{rowkey:r2 c1:a=r2c1a c2:b=r2c2b}
{rowkey:r3 c1:a=c1a c1:b=r3c1b c2:a=r3c2b c2:b=r3c2b}
{rowkey:r4 c1:a=c1a c1:b=r4c1b c2:a=r4c2b c2:b=r4c2b}
-----------------findAll() end-------------
Results of scan #1:
KV: r1/c1:a/1378780212041/Put/vlen=5/ts=0, Value: r1c1a
KV: r1/c1:b/1378780212041/Put/vlen=5/ts=0, Value: r1c1b
KV: r1/c2:a/1378780212041/Put/vlen=5/ts=0, Value: r1c2a
KV: r1/c2:b/1378780212041/Put/vlen=5/ts=0, Value: r1c2b
KV: r2/c1:a/1378780212056/Put/vlen=5/ts=0, Value: r2c1a
KV: r2/c2:b/1378780212056/Put/vlen=5/ts=0, Value: r2c2b
KV: r3/c1:b/1378780212063/Put/vlen=5/ts=0, Value: r3c1b
KV: r3/c2:a/1378780212063/Put/vlen=5/ts=0, Value: r3c2b
KV: r3/c2:b/1378780212063/Put/vlen=5/ts=0, Value: r3c2b
KV: r4/c1:b/1378780212070/Put/vlen=5/ts=0, Value: r4c1b
KV: r4/c2:a/1378780212070/Put/vlen=5/ts=0, Value: r4c2b
KV: r4/c2:b/1378780212070/Put/vlen=5/ts=0, Value: r4c2b
Total KeyValue count for scan #1: 12
Results of scan #2:
KV: r1/c1:a/1378780212041/Put/vlen=5/ts=0, Value: r1c1a
KV: r1/c1:b/1378780212041/Put/vlen=5/ts=0, Value: r1c1b
KV: r1/c2:a/1378780212041/Put/vlen=5/ts=0, Value: r1c2a
KV: r1/c2:b/1378780212041/Put/vlen=5/ts=0, Value: r1c2b
KV: r2/c1:a/1378780212056/Put/vlen=5/ts=0, Value: r2c1a
KV: r2/c2:b/1378780212056/Put/vlen=5/ts=0, Value: r2c2b
Total KeyValue count for scan #2: 6
3.2 WhileMatchFilter
其构造函数如下,功能:检索到第一个不满足filter1的cell就终止,返回检索的结果
public WhileMatchFilter(Filter filter1)
示例:
package filter;
import java.io.IOException;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.ValueFilter;
import org.apache.hadoop.hbase.filter.WhileMatchFilter;
import org.apache.hadoop.hbase.util.Bytes;
public class WhileMatchFilterExample extends FilterExampleBase {
public static void main(String[] args) throws IOException {
new WhileMatchFilterExample().doMain();
}
public void testFilter() throws IOException {
Filter filter1 = new ValueFilter(CompareFilter.CompareOp.NOT_EQUAL,
new BinaryComparator(Bytes.toBytes("r3c1b")));
Filter whilematchFilter = new WhileMatchFilter(filter1);
Scan scan = new Scan();
scan.setFilter(whilematchFilter);
ResultScanner scanner = table.getScanner(scan);
showScanner(scanner);
scanner.close();
}
}
结果:
start create table......
test is exist delete!!!
create table over......
start insert......
end insert......
-----------------findAll() start-------------
{rowkey:r1 c1:a=r1c1a c1:b=r1c1b c2:a=r1c2a c2:b=r1c2b}
{rowkey:r2 c1:a=r2c1a c2:b=r2c2b}
{rowkey:r3 c1:a=c1a c1:b=r3c1b c2:a=r3c2b c2:b=r3c2b}
{rowkey:r4 c1:a=c1a c1:b=r4c1b c2:a=r4c2b c2:b=r4c2b}
-----------------findAll() end-------------
{rowkey:r1 c1:a=r1c1a c1:b=r1c1b c2:a=r1c2a c2:b=r1c2b}
{rowkey:r2 c1:a=r2c1a c2:b=r2c2b}
{rowkey:r3 c1:a=c1a}