hbase学习笔记6-过滤器

Hbase在操作数据中的基本的API,包括增删查。增删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特定的主键查询(Get)或者根据主键的一个范围来查询(Scan)。Hbase提供了更加高级的过滤器来查询,当然还有另外一些高级的模块,我们将在这一篇里看到。

 

一、过滤器(Filter

    基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:FilterFilter可以根据簇、列、版本等更多的条件来对数据进行过滤,基于Hbase本身提供的三维有序(主键有序、列有序、版本有序),这些Filter可以高效的完成查询过滤的任务。带有Filter条件的RPC查询请求会把Filter分发到各个RegionServer,是一个服务器端(Server-side)的过滤器,这样也可以降低网络传输的压力。

    要完成一个过滤的操作,至少需要两个参数。一个是抽象的操作符,Hbase提供了枚举类型的变量来表示这些抽象的操作符:LESS/LESS_OR_EQUAL/EQUAL/NOT_EUQAL等;另外一个就是具体的比较器(Comparator),代表具体的比较逻辑,如果可以提高字节级的比较、字符串级的比较等。有了这两个参数,我们就可以清晰的定义筛选的条件,过滤数据。

扫描二维码关注公众号,回复: 587478 查看本文章

 

CompareFilterCompareOp compareOp WritableByteArrayComparable valueComparator

 

   CompareFilter是高层的抽象类,下面我们将看到它的实现类和实现类代表的各种过滤条件。这里实现类实际上代表的是参数中的过滤器过滤的内容,可以使主键、簇名、列值等,这就是由CompareFilter决定了。

 

 

    行过滤器(RowFilter

    行过滤器的比较对象是行主键

Scan scan = new Scan();

Filter filter1 = new RowFilter(CompareFIlter.CompareOp.LESS_OR_EUQAL, new BinaryComparator(Bytes.toBytes("hello")));

scan.setFilter(filter1);

scan.close();

 

例中的Filter会将所有的小于等于“Hello”的主键过滤出来。

 

    簇过滤器(FamilyFilter

    簇过滤器过滤的是簇的名字。

 

    列过滤器(QualifierFilter

    列过滤器过滤的是列的名字。

 

    值过滤器(ValueFilter

    值过滤器过滤的是扫描对象的值。

 

    单值过滤器(SingleColumnValueFilter

    单值过滤器是以特定列的值为过滤内容,与值过滤器不同的是,这里是特定的列,而值过滤器比较的是行内的所有列。所有在使用单值过滤器的时候要指定比较的列的坐标。

SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareOp compareOp, WritableByteArrayComparable comparator)

 

对于找不到该列的行,可以有特殊的处理 

 

void setFilterIfMissing(boolean filterIfMissing)

 

默认缺省行将被包含进过滤的结果集中。

 

    前缀过滤器(PrefixFilter

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

 

 

PrefixFilter(byte[] prefix)

页过滤器(PageFilter

    页过滤器可以根据主键有序返回固定数量的记录,这需要客户端在遍历的时候记住页开始的地方,配合scanstartkey一起使用。

PageFilter(int size)

 

键过滤器(KeyOnlyFilter

    键过滤器可以简单的设置过滤的结果集中只包含键而忽略值,这里有一个选项可以把结果集的值保存为值的长度。

 

    FirstKeyOnlyFilter

    在键过滤器的基础上,根据列有序,只包含第一个满足的键。

 

    ColumnPrefixFilter

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

 

    TimestampsFilter

TimestampsFilter(List<Long> times)

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

 

    包装类过滤器,此类过滤器要通过包装其他的过滤器才有意义,是其他过滤器的一种加强。

    SkipFilter

SkipFilter(Filter filter)

 

过滤器集合(FilterList

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

猜你喜欢

转载自501565246-qq-com.iteye.com/blog/1931065