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}
相关文章推荐
- 你不一定真正理解的NAT基本结构和分类
- wifi使用:笔记本变无线路由
- Web前端优化最佳实践及工具集锦
- SOA与EAI的比较
- 保存记事历Excel文件
- Pale Moon 苍月浏览器 24.0.1 发布
- js声明变量使用var声明与不使用var声明比较
- MySQL统计数据库表中是否有自增长列
- Eclipse下BASE64Decoder提示错误的解决办法
- 一个APK反编译利器Apktool
- android 内存优化 性能优化
- android 内存优化 性能优化
- 创建自定义数据表(再示例)
- SVN冲突解决详解
- Chrome即将封杀Google Earth、Google Talk等插件
- js中的this详解
- C语言 string.h 中函数的实现
- 东软集团为我校10级、11级软件工程和软件专业进行专业实训
- winform嵌入可执行
- CSS3之文字阴影text-shadow