Hbase Client API – Filter简介

1.Filter

Hbase Filter是一项强大的功能,可以在处理存储在表中的巨量数据时大大提高查询的效率。HBase的两个主要读取函数是get()和scan(),它们分别支持直接访问数据或使用Start 或者 End键。 可以通过逐步向查询添加更多条件来限制检索的数据数量。 这些限制条件column families, column qualifiers, timestamps 和ranges 等。

1543913736210844.png

上图显示了如何在客户端上配置过滤器,然后通过网络进行过滤器序列化,然后将过滤器应用于RegionServer。

2. Filter Base Class

Filter Interface是所有过滤器类的接口,实际过滤器类用来实现它的具体实现, 大多数具体的过滤器类是FilterBase的直接后代, 定义要应用的过滤器的新实例,并使用以下方法将其传递给Get或Scan实例:

setFilter(filter)

在初始化过滤器实例本身时,通常必须为过滤器提供参数。在接下来的章节中,我们将介绍一些常用的Filter。

比较运算符(Comparison operators)

当基于CompareFilter的过滤器向FilterBase类实现一方法,即compare()操作时,它必须提供操作符类型,该类型定义如何解释比较结果。支持如下的比较运算:

1542185960249812.png

Comparators

需要为CompareFilter类提供的第二种类型是Comparators

,可以定义以不同方式比较各种值和键。 它们派生自WritableByteArrayComparable类,实现了Writable和Comparable接口。

3. 比较过滤器 (Comparison Filters)

比较过滤器采用了前面描述的比较运算符和Comparators。 每个构造函数都具有相同的签名,继承自CompareFilter:

CompareFilter(CompareOp valueCompareOp,WritableByteArrayComparable valueComparator)

需要为过滤器提供此比较运算符和Comparators以执行其工作。 接下来,我们将介绍实现特定比较的各种过滤器。

RowFilter

此过滤器能够基于row key过滤数据。 

FamilyFilter

此过滤器与RowFilter非常相似,但将比较应用于行中可用的列族 – 而不是行键。 使用运算符和比较器的可用组合,可以过滤列族级别的检索数据中包含的内容。 

QualifierFilter

允许从表中筛选特定的列。

ValueFilter

此过滤器可以包含具有特定值的列。 例如,结合RegexStringComparator,可以使用强大的表达式语法进行特定值的过滤。 

DependentColumnFilter

依赖列或引用列 –  控制其他列的过滤方式。 该Filter使用引用列的时间戳,并包括具有相同时间戳的所有其他列。

4. 专用过滤器 (Dedicated Filters)

专用过滤器基于FilterBase类并提供实现。 专用过滤器仅在执行scan操作时才真正适用,它们会过滤掉整个行。 

SingleColumnValueFilter

该Filter适用于只有一列决定是否应返回整行,则可以使用此过滤器。 需要先指定列,然后指定要检查的值。

PrefixFilter

给定在实例化过滤器实例时指定的前缀,将匹配此前缀的所有行返回给客户端。

PageFilter

通过使用此过滤器对行进行分页。 创建实例时,指定pageSize参数,该参数控制应返回每页的行数。

TimestampsFilter

当需要对扫描结果中包含的版本进行细粒度控制时,可以使用此过滤器。

5. Decorating Filters

该类过滤器可以修改或扩展过滤器的行为以获得对返回数据的额外控制。该类过滤器在某些情况下很有用,下面列举以下常用的Filter。 

SkipFilter

当过滤器提示要忽略KeyValue时,此过滤器会包装给定的过滤器并将其扩展以排除整行。 换句话说,只要过滤器省略了一行中的列,就省略整行。

FilterList

可能希望应用多个过滤器来减少返回到客户端应用程序的数据。 这时可以使用FilterList过滤器。

Hbase Client API – Filter简介

发表评论

邮箱地址不会被公开。 必填项已用*标注

− 1 = 七

滚动到顶部