您的位置:首页 > 其它

HBase查询(3)---Decorating Filters装饰性过滤器

2013-09-25 08:51 330 查看

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}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: