作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7098138.html 转载请注明出处

我们知道Hbase的Scan经常需要用到filter来过滤表中的数据返回给客户端,单个的filter还好说,如果有多个呢,那么就需要使用FilterList,它也是继承于抽象类Filter,

里面持久化了一个有序的order list来存储不同的filter对数据进行过滤.

FilterList分为二种类型,如下

FilterList allFilters = new FilterList(FilterList.Operator.MUST_PASS_ONE);

或者

FilterList allFilters = new FilterList(FilterList.Operator.MUST_PASS_ALL);

查看源代码,可以仔细看下如下注释

  • {@link Operator#MUST_PASS_ALL} evaluates lazily: evaluation stops as soon as one filter does
  • not include the KeyValue.
  • {@link Operator#MUST_PASS_ONE} evaluates non-lazily: all filters are always evaluated.

二种区别根据上述注释理解,其实就相当于and和or的关系.MUST_PASS_ONE只要scan的数据行符合其中一个filter就可以返回结果(但是必须扫描所有的filter),

另外一种MUST_PASS_ALL必须所有的filter匹配通过才能返回数据行(但是只要有一个filter匹配没通过就算失败,后续的filter停止匹配)。这里可能说起来有点绕。

那么来一段代码体会

FilterList allFilters = new FilterList(FilterList.Operator.MUST_PASS_ALL);
allFilters.addFilter(new PrefixFilter(Bytes.toBytes("abc")));
allFilters.addFilter(new RowFilter(CompareFilter.CompareOp.EQUAL,
new RegexStringComparator(".*_(xyz|xxx)$"));
allFilters.addFilter(new QualifierFilter(CompareFilter.CompareOp.EQUAL,
new SubstringComparator("china")));
scan.setFilter(allFilters);

第一个PrefixFilter是对rowkey的前缀进行过滤,第2个RowFilter是对rowKey进行正则匹配,rowkey的结尾必须满足特定的字符串,第三个QualifierFilter是对列限定符

进行匹配,列限定符必须equal字符串"china"才可以.那么FilterList在这里的类型由于是MUST_PASS_ALL,因此扫描的数据行必须匹配通过这3个filter才可以返回结果.而

实际在扫描匹配的时候,由于filter是有序的,那么在匹配第一个filter的时候,如果已经不符合了,后面的几个filter匹配就会停止,不会再进行了.

Hbase FilterList使用总结的更多相关文章

  1. hbase各种遍历查询shell语句 包含过滤组合条件

    import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Li ...

  2. Hbase多条件查询数据(FilterList)

    利用Filter进行筛选:HBase的Scan可以通过setFilter方法添加过滤器(Filter),这也是分页.多条件查询的基础.HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBas ...

  3. Hbase Filter之FilterList

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7098138.html 转载请注明出处 我们知道Hbase的Scan经常需要用到filter来过滤表中的数 ...

  4. hbase开发实例

    1.put/checkAndPut package com.testdata; import java.io.IOException; import org.apache.hadoop.conf.Co ...

  5. Hbase过滤器Filter的使用心得(爬坑经验)

    Hbase 的过滤器是个好东西.. 给这种非关系型数据库本来不能复杂查询的情况得到了很好的扩展..提供了很多的帮助.. 但是Filter的种类何其之多..让人眼花缭乱.. 譬如..分页类型的PageF ...

  6. HBase配置性能调优(转)

    因官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果.所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正. 配置优化 zo ...

  7. hbase scan 的例子

    /** * Created by han on 2016/1/28. */ import org.apache.hadoop.conf.Configuration; import org.apache ...

  8. HBase Java简单示例

    Hbase采用Java实现,原生客户端也是Java实现,其他语言需要通过thritf接口服务间接访问Hbase的数据. Hbase作为大数据存储数据库,其写能力非常强,加上Hbase本身就脱胎于Had ...

  9. 【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询

    1.搭建环境 新建JAVA项目,添加的包有: 有关Hadoop的hadoop-core-0.20.204.0.jar 有关Hbase的hbase-0.90.4.jar.hbase-0.90.4-tes ...

随机推荐

  1. zoj 1013 Great Equipment DP

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=13 很经典的一个DP的题目 定义dp[i][num1][num2]表示 ...

  2. UVa1025 (DAG上的dp)

    这是紫书上的第一个dp哈. 1.状态定义:dp[i][j]---->到时刻i的时候(出发的时候时刻为0,约定时间为时刻time),从j号车站开往N号车站,在车站等待的最少的时间. 2.这个人当前 ...

  3. Quartz.net 定时任务之简单任务

    一.概述 1.quartz.net 是一款从java quartz 上延伸出来的定时任务框架. 2.我在网上看到很多大神写过关于quartz.net 的博客.文章等,在这些博客文章里也学会了很多关于q ...

  4. 《安卓网络编程》之第六篇 Android中的WIFI和蓝牙

    关于WIFI就不多介绍啦,直接来个段子吧. 问:“WiFi对人体有伤害么?” 答:“不清楚,反正没有WiFi我就浑身不舒服. 比较重要的一点就是WifiManager  wm=(WifiManager ...

  5. OpenCV探索之路(十四):绘制点、直线、几何图形

    绘制点和圆 void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int li ...

  6. java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)

    概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...

  7. ASP.NET MVC Filter的思考

    思考了一下AOP的具体实现,后来想到ASP.NET MVC过滤器其实就是AOP的一种,于是从Filter下手研究AOP. 暂时先考虑AuthorizationFilter,ActionFilter,R ...

  8. 默认路由、RIPv2、OSPF、EIGRP配置(全网全通)

    1:默认路由 遇到问题:给r2配置向右的单项默认路由,通过PC1去ping主机PC2,一直显示Request timed out, 解决方法:r2配置如下: r2(config)#ip route 0 ...

  9. 深入理解Java常用类-----StringBuilder

    上篇文章我们介绍过String这个常用类,知道了该类的内部其实是用的一个char数组表示一个字符串对象的,只是该字符数组被final修饰,一旦初始化就不能修改,但是对于经常做字符串修改操作的情况下,S ...

  10. Mac OS 的命令行 总结

    du 命令 查看目录下所有文件的大小: du -sh * ls 命令 直接显示当前目录下的所有的非隐藏文件: ls // 怎么在文章中显示不出来?? 显示当前目录下的所有的文件(包括隐藏的): ls ...