首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HBase高级特性之过滤器

【导读:数据是二十一世纪的石油,蕴含巨大价值,这是·情报通·大数据技术系列第[44]篇文章,欢迎阅读和收藏】

1 基本概念

过滤器在 get 和 scan 的基础上,进行进一步的过滤,如列名、具体值等。Hbase 提供了很多自带的实现类,也可以自定义 filter 。所有的过滤器都在服务端生效,所以过滤掉的数据不会传到客户端。使用者的自己的代码实现也尽量不要做客户端的过滤。

2 术语解释

HBase 中有各种过滤器,擅长处理的过滤条件各有不同。针对不同的业务需求,选择合适的 Filter 方法来继承,可以最大地提高查询效率。具体过滤器名称介绍见详细说明章节。

3 详细说明

通用接口为 org.apache.hadoop.hbase.filter.Filter ,已有的接口实现中:

大部分实体过滤器类继承自 org.apache.hadoop.hbase.filter.FilterBase

还有一组继承自 org.apache.hadoop.hbase.filter.CompareFilter ,比 FilterBase 多一个 compare() 方法。

3.1 CompareFilter 及实现类

CompareFilter 需要两个参数,一个是比较运算符;一个是比较器。语义上,比较过滤器是返回成功匹配的值,和 hbase 过滤器原有的目的(筛掉无用信息)不同。

1)比较运算符CompareFilter.CompareOp

枚举类型

2)比较器ByteArrayComparable

ByteArrayComparable 类,实现了 org.apache.hadoop.io.Writable 和 Comparable 接口。Hbase 自带了几个已实现的子类:

3.2 FilterBase 及实现类

Hbase 第二类过滤器是继承自 FilterBase ,部分过滤器只适用于 scan ,因为用在 get 上,会要么包含整行,要么都不包含。

3.2.1单列值过滤器SingleColumnValueFilter

用一列的值判断本行数据是否整体过滤掉。SingleColumnValueFilter 使用了比较过滤器类似的参数风格,但是注意,并没有继承关系。

1 )使用比较运算符,检查列值和字符串 '2013-06-08' 相等。

SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareFilter.CompareOp compareOp, byte[] value)

3.2.2单列排除过滤器SingleColumnValueExcludeFilter

继承 SingleColumnValueFilter ,略不同的语义是参考列不被包含到结果中。通过传入一个参考键值对(参考列),如果某行条件相符,则该行被返回,但这行里面将不包含该参考键值对(参考列)的内容。

3.2.3前缀过滤器PrefixFilter

构造一个前缀,匹配前缀的行会返回客户端。也是按字典顺序查找。一般 scan 的时候使用。

3.2.4分页过滤器PageFilter

页过滤,通过设置 pagesize 参数可以返回每一页的数量的行。

客户端需要记住上一次访问的 row 的 key 值。 // scan.setStartRow(startRow);

3.2.5自定义过滤器

自定义 Filter 一般继承 FilterBase 类,也可以继承 Filter 接口,前者把后者所有的方法提供了默认实现,按需覆写即可。

Filter 接口中有个枚举 Filter.ReturnCode ,被 filterKeyValue() 方法用于通知执行框架,决定如何执行下一步。

3.2.6结构过滤器FilterList

在 FilterList 中添加多个过滤器,这样可对 scan 或 get 应用多个 Filter 。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200129A006RR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券