Hbase过滤器简介

  HBase的基本API,包括增、删、改、查等,增、删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。 HBase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。通过这些过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。

  HBase过滤器的类型很多,但是可以分为两大类:比较过滤器,专用过滤器。

 1. 比较过滤器 - 通用比较器

  比较器作为过滤器的核心组成之一,用于处理具体的比较逻辑,例如字节级的比较,字符串级的比较等。

  • BinaryComparator

     二进制比较器,用于按字典顺序比较 Byte 数据值

  • BinaryPrefixComparator

     前缀二进制比较器,按前缀比较

  • NullComparator

     判断给定的是否为空

  • BitComparator

按位比较

  • RegexStringComparator

支持正则表达式的值比较,仅支持 EQUAL 和非EQUAL

  • SubstringComparator

判断提供的子串是否出现在value中,不区分大小写

2. 比较过滤器 - 通用操作符

     HBase提供了枚举类型的变量来表示我们常用的抽象操作符。

  • LESS   <
  • LESS_OR_EQUAL   <=
  • EQUAL   =
  • NOT_EQUAL   <>
  • GREATER_OR_EQUAL   >=
  • GREATER   >
  • NO_OP   排除所有

3.比较过滤器 - 行健过滤器

  • RowFilter 筛选出行健匹配的所有的行

- 语法 RowFilter(操作符,比较器)

- 性能 一般来讲,执行 Scan 使用 startRow/stopRow 方式比较好

- 示例代码

new RowFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(
Bytes.toBytes("testRowkey1")))
筛选出行健等于testRowkey1的行
new RowFilter(
CompareFilter.CompareOp.LESS_OR_EQUAL,
new BinaryComparator(
Bytes.toBytes("testRowkey20")))
筛选出行健小于等于testRowkey20的行

- 调用示例

Connection connection = ConnectionFactory.createConnection(
ConfigFactory.getInstance().getHbaseConf());
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(rowkey)));
scan.setFilter(filter);
ResultScanner results = table.getScanner(scan);

4.比较过滤器 - 列簇过滤器

- FamilyFilter 筛选出列簇匹配的数据 返回数据的单位是Cell,而不是整行数据

- 语法 FamilyFilter(操作符,比较器)

- 性能 通常在 Scan 过程中通过设定某些列族来实现该功能,而不是直接使用该过滤器

- 示例代码

new FamilyFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(
Bytes.toBytes("family1")))
筛选出列簇等于family1的cell
new FamilyFilter(CompareFilter.CompareOp.LESS,
new BinaryComparator(Bytes.toBytes("family20")))
筛选出列簇小于family20的cell

5.比较过滤器 - 子列过滤器

- QualifierFilter 筛选出子列匹配的数据 返回数据的单位是Cell,而不是整行数据

- 语法 QualifierFilter(操作符,比较器)

- 示例代码

new QualifierFilter(CompareOp.EQUAL, new RegexStringComparator("you."));
筛选出子列以you开头,不止是you,以及空的cell
new QualifierFilter(CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("column1")))
筛选出子列不等于column1的cell

6.比较过滤器 - 子列范围过滤器

- ColumnRangeFilter 该过滤器用于获取一个指定子列范围内的所有Cell。

- 语法 ColumnRangeFilter(子列起始值、是否包含起始值,子列结束值,是否包含结束值)

- 性能 该过滤器可以进行高效的子列内部扫描(因为子列是已经按字典排序好的),HBase-0.9.2 版本引入该功能。

- 示例代码

new ColumnRangeFilter(
Bytes.toBytes("column1"), true,
Bytes.toBytes("column10"), true)
筛选出子列大于等于column1,小于等于column10的 所有cell

7.比较过滤器 -列值过滤器

- ValueFilter 筛选出列值匹配的数据 返回数据的单位是Cell,而不是整行数据

- 语法 ValueFilter(操作符,比较器)

- 示例代码

new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("value"))
筛选出所有列值中包含value的cell

8.专用过滤器 - 行健前缀过滤器

- PrefixFilter 筛选出行健前缀匹配的所有的行

- 语法 PrefixFilter(行健前缀)

- 示例代码

new PrefixFilter(Bytes.toBytes("testRowkey"))
筛选出行健前缀等于testRowkey的所有行

9.专用过滤器 - 子列前缀过滤器

- ColumnPrefixFilter 筛选出包含前缀的所有子列 返回数据的单位是Cell,而不是整行数据一般来讲

- 语法 ColumnPrefixFilter(前缀)

- 示例代码

new ColumnPrefixFilter(Bytes.toBytes("column"))
筛选出所有以column开头子列的cellnew ColumnPrefixFilter(Bytes.toBytes("column"))
筛选出所有以column开头子列的cell

10.专用过滤器 - 多子列前缀过滤器

- MultipleColumnPrefixFilter MultipleColumnPrefixFilter 与 ColumnPrefixFilter 的行为类似,但可以指定多个子列前缀

- 语法 MultipleColumnPrefixFilter(前缀byte二维数组)

- 示例代码

byte[][] prefixes = new byte[][]{Bytes.toBytes("column 1"), Bytes.toBytes("column2")}
new MultipleColumnPrefixFilter (prefixes)
筛选出所有以column1和column2开头子列的cell

 11.专用过滤器 - 列综合过滤器

- DependentColumnFilter 该过滤器尝试找到该列簇、子列所在的Cell。

- 语法 DependentColumnFilter(列簇、子列)

- 示例代码

new DependentColumnFilter(
Bytes.toBytes("family1"), Bytes.toBytes("column1"))
筛选出所有列簇family1、子列column1的所有Cell

12.专用过滤器 - 结构过滤器

- FilterList 该过滤器代表一个过滤器链 ,它可以包含一组即将应用于目标数据集的过滤器,过滤器间具有“与”和“或”关系。

- 语法

FilterList(列关系、过滤器集合)

FilterList.Operator.MUST_PASS_ ALL 关系与

FilterList.Operator.MUST_PASS_ ONE 关系或

- 示例代码

Connection connection = ConnectionFactory.createConnection(
ConfigFactory.getInstance().getHbaseConf());
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(rowkey)));
Filter filter2 = new DependentColumnFilter(
Bytes.toBytes(“family1”), Bytes.toBytes(“column1”));
List<Filter> filters = new ArrayList<>();
filters.add(filter1);
filters.add(filter2);
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, filters);
scan.setFilter(filterList);
ResultScanner results = table.getScanner(scan);

Hbase过滤器的更多相关文章

  1. HBase学习——4.HBase过滤器

    1.过滤器 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filter可以根据簇.列.版本等更多的条件来对数据进行过滤,基于Hbase本身提 ...

  2. Hadoop生态圈-Hbase过滤器(Filter)

    Hadoop生态圈-Hbase过滤器(Filter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  3. HBase(七)Hbase过滤器

    一.过滤器(Filter) 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filter可以根据簇.列.版本等更多的条件来对数据进行过滤,基于 ...

  4. HBase 学习之路(七)——HBase过滤器详解

    一.HBase过滤器简介 Hbase提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predica ...

  5. HBase 系列(七)——HBase 过滤器详解

    一.HBase过滤器简介 Hbase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predic ...

  6. 入门大数据---Hbase 过滤器详解

    一.HBase过滤器简介 Hbase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predic ...

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

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

  8. hbase 过滤器 rowfilter

    HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行 ...

  9. HBase过滤器的使用

    一.常用过滤器: 1.数据准备: Rowkey:001 Family:Quilfifier address value: 昆明市西山区 Rowkey:001 Family:Quilfifier age ...

随机推荐

  1. collectd的python插件(redis)

    https://blog.dbrgn.ch/2017/3/10/write-a-collectd-python-plugin/ redis_info.conf <LoadPlugin pytho ...

  2. myEclipse mybatis自动生成工具xml配置

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE generatorConfiguration ...

  3. git常用命令#自用#

    =====  未完结,慢慢补充 =====   零.克隆 1.克隆主分支 : git clone ${remotePath} 2.克隆指定分支 : git clone -b <branch na ...

  4. zimbra邮件服务器的搭建和迁移

    背景: 公司最近由于服务器费用问题,需要将邮件服务器从亚马逊(新加坡)云服务器A迁移到阿里云(香港)云服务器B. 由于邮箱使用的是域名访问,但是没有进行备案,所以只能迁移到港澳台地区,才能正常使用. ...

  5. Jenkins在deploy maven artifact时报Peer not authenticated.

    这是一起由Nexus证书导入错误造成的Jenkins运行异常. 最近,同事修改了Nexus服务器的host name,结果导致Jenkins里的任务全都执行不了了.虽然job的配置都已经更新指向新的N ...

  6. CDN缓存策略

    以下内容就是FAQ,自己也学习一下... 1.CDN加速原理通过动态域名解析,网友的请求被分配到离自己最快的服务器.CDN服务器直接返回缓存文件或通过专线代理原站的内容.网络加速+内容缓存,有效提供访 ...

  7. NET(C#):使用HttpWebRequest头中的Range下载文件片段

    转自:http://www.mgenware.com/blog/?p=220 HTTP请求包头信息中有一个Range属性可以指定索取部分HTTP请求的文件.在.NET中则通过HttpWebReques ...

  8. React v15.5.0更新说明 & v16.0.0更新预告

    React今日发布了15.5.0版本,同时这也将是以15开头的最后一个版本,下一次发布,我们将迎来React 16.0.0 在15.5.0这一版本中,主要有以下两处改动: 独立React.PropTy ...

  9. O(1) 和 O(n) 的区别

    举个简单的例子,要从0加到n,我们会这么写:int sum = 0;for(int i = 0; i<=n; ++i){   sum += i;}一共算了n次加法,那么就说这个时间复杂度是O(n ...

  10. [cocos2d-x]-会动的精灵

    小鸟一直在扑翅膀的代码块: auto sprite = Sprite::create(); Animation *animation = Animation::create(); animation- ...