HBase Filter

Filter

  • CompareFilter

是高层的抽象类,下面我们将看到他的实现类和实现类代表的各种过滤条件

  • RowFilter,FamliyFilter,QualifierFilter,ValueFilter

行,列组,列,值等的过滤

1.RowFilter

相关的过滤方法使用:
提取rowkey以01结尾数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*01$"));

提取rowkey以包含201407的数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator("201407"));


提取rowkey以123开头的数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryPrefixComparator("123".getBytes()));

  • SingleColumnValueFilter

单值过滤器是以特定“列”的“值”为过滤内容,值得是单列的值。而行值过滤器比较的是所有列的值。与其进行比较。

 

//时间范围的查找, 比如是2012-12-12到2013-01-23日之间的数据

FilterList filter = new FilterList(); 
    if (timeFrom != null) { 
        String sDate = String.valueOf(timeFrom.getTime()); 
        SingleColumnValueFilter scvf = new SingleColumnValueFilter(Bytes.toBytes("CF"), Bytes.toBytes("Date"), CompareOp.GREATER_OR_EQUAL, 
                Bytes.toBytes(String.valueOf(sDate))); 
        filter.addFilter(scvf); 
    
   
    if (timeTo != null) { 
        String sDate = String.valueOf(timeTo.getTime()); 
        SingleColumnValueFilter scvf = new SingleColumnValueFilter(Bytes.toBytes("CF"), Bytes.toBytes("Date"), CompareOp.LESS_OR_EQUAL, 
                Bytes.toBytes(String.valueOf(sDate))); 
        filter.addFilter(scvf); 
    }
  • FilterMissing

指的是对于找不到该列的行的时候,做的特殊处理。true,不返回该行,false 返回该行

  • PrefixFilter

前缀过滤器将会过滤掉不匹配的记录,过滤的对象是主键的值。

  • PageFilter

分页过滤器,通过pageSize设置每次返回的行数,这需要客户端在遍历的时候记住页开始的地方,配合scan的startkey一起使用

  • FilterList

过滤器集合,Hbase的过滤器设计遵照于设计模式中的组合模式,以上的所有过滤器都可以叠加起来共同作用于一次查询

  • KeyOnlyFilter

设置过滤的结果集中只包含键而忽略值,

  • FirstKeyOnlyFilter

在键过滤器的基础上,根据列有序,只包含第一个满足的键,返回每个行的第一列的KV,可以用于有效的执行行计数操作。

  • ColumnPrefixFilter

这里过滤的对象是列的值。

  • TimestampsFilter

这里参数是一个集合,只有包含在集合中的版本才会包含在结果集中



作者:WJustHM
链接:https://www.jianshu.com/p/0485cb607c2f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

posted on 2017-12-22 15:58  cxhfuujust  阅读(306)  评论(0编辑  收藏  举报

导航