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. Hadoop Archives档案

    HDFS 并不擅长存储小文件,因为每个文件最少一个 block,每个 block 的元数据都会在 NameNode 占用内存,如果存在大量的小文件,它们会吃掉NameNode 节点的大量内存. Had ...

  2. 【Leetcode】【Medium】Unique Binary Search Trees II

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  3. 使用NSURLConnection实现大文件断点下载

    使用NSURLConnection实现大文件断点下载 由于是实现大文件的断点下载,不是下载一般图片什么的.在设计这个类的时候本身就不会考虑把下载的文件缓存到内存中,而是直接写到文件系统. 要实现断点下 ...

  4. Go语言 map遍历

    1 遍历顺序 Go语言里的map,是不保证遍历顺序的(这一点很好理解).甚至同样内容的map,两次遍历的顺序,也可能不一样.下面是一个例子: m := map[string]int{"a1& ...

  5. yii2.0 Activeform表单部分组件使用方法 [ 2.0 版本 ]

    文本框:textInput(); 密码框:passwordInput(); 单选框:radio(),radioList(); 复选框:checkbox(),checkboxList(); 下拉框:dr ...

  6. EJB 3.1 @Startup @Singleton sequence

    The annotation javax.ejb.Startup (@Startup) is used to mark an EJB so to make the EJB can be brought ...

  7. 1874 football game(三分法and method to compute the area of trianngle)

    FInd the max area. 1. 三分法 2. NAN (not comparable with number) http://acm.timus.ru/problem.aspx?space ...

  8. 记录linux查询命令的一个网站

    http://man.linuxde.net/ 另外下面是对常用命令的总结 https://www.cnblogs.com/soyxiaobi/p/9717483.html

  9. 关于mysql 出现 1264 Out of range value for column 错误的解决办法

    今天给客服恢复mysql数据的时候.本来测试好的数据.但是到了客户那里却死活不干活了.老报错! INSERT INTO ka_tan4 set num='716641385999', username ...

  10. CUDA 深入浅出谈[转]

    CUDA 深入浅出谈           “CUDA 是 NVIDIA 的 GPGPU 模型,它使用 C 语言为基础,可以直接以大多数人熟悉的 C 语言,写出在显示芯片上执行的程序,而不需要去学习特定 ...