HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。通常来说,通过行键,值来筛选数据的应用场景较多。

1.创建测试表studnet1

Vi Student1.java

import java.io.IOException;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.client.Put; public class Student1{
public static void main(String[] args){
HBaseConfiguration config = new HBaseConfiguration();
config.set("hbase.zookeeper.quorum", "h201,h202,h203");
String tablename = new String("student1");
try{
HBaseAdmin admin = new HBaseAdmin(config);
if(admin.tableExists(tablename)){
admin.disableTable(tablename);
admin.deleteTable(tablename);
}
HTableDescriptor tableDesc = new HTableDescriptor(tablename);
tableDesc.addFamily(new HColumnDescriptor("cf1")); admin.createTable(tableDesc);
admin.close(); HTable table = new HTable(config, Bytes.toBytes("student1"));
Put put1 = new Put(Bytes.toBytes("a101"));
put1.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("zs1")); Put put2 = new Put(Bytes.toBytes("a102"));
put2.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("ls1")); Put put3 = new Put(Bytes.toBytes("a103"));
put3.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("ww1")); table.put(put1);
table.put(put2);
table.put(put3);
table.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
  1. 使用过滤器

1.1

RowFilter:筛选出匹配的所有的行,对于这个过滤器的应用场景,是非常直观的:使用BinaryComparator可以筛选出具有某个行键的行,或者通过改变比较运算符(CompareFilter.CompareOp.EQUAL)来筛选出符合某一条件的多条数据

RowFilter用于过滤row key

Operator

Description

LESS

小于

LESS_OR_EQUAL

小于等于

[EQUAL

等于

NOT_EQUAL

不等于

GREATER_OR_EQUAL

大于等于

GREATER

大于

NO_OP

排除所有

Comparator

Description

BinaryComparator

使用Bytes.compareTo()比较

BinaryPrefixComparator

和BinaryComparator差不多,从前面开始比较

RegexStringComparator

正则表达式

SubstringComparator

把数据当成字符串,用contains()来判断

import java.io.IOException;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.CompareFilter; public class hss1{ public static void main(String[] args){
HBaseConfiguration config = new HBaseConfiguration();
config.set("hbase.zookeeper.quorum", "h201,h202,h203"); try{
HTable table = new HTable(config, Bytes.toBytes("student1"));
Scan scan = new Scan();
Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator("a101".getBytes()));
scan.setFilter(filter1);
ResultScanner rst = table.getScanner(scan);
for (Result r:rst){
for (KeyValue kv : r.raw()) {
StringBuffer s1 = new StringBuffer()
.append(Bytes.toString(kv.getRow())).append(":")
.append(Bytes.toString(kv.getFamily())).append(",")
.append(Bytes.toString(kv.getQualifier())).append(",")
.append(Bytes.toString(kv.getValue()));
System.out.println(s1.toString());
}
}
rst.close();
table.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}

1.2
PrefixFilter:筛选出具有特定前缀的行键的数据。这个过滤器所实现的功能其实也可以由RowFilter结合RegexStringComparator来实现,不过这里提供了一种简便的使用方法

import org.apache.hadoop.hbase.filter.PrefixFilter;
Filter filter2 = new PrefixFilter(Bytes.toBytes("a"));
scan.setFilter(filter2);

1.3
RegexComparator 正则过滤
import org.apache.hadoop.hbase.filter.RegexStringComparator;
Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator("^a.*"));
 scan.setFilter(filter3);

hbase 过滤器 rowfilter的更多相关文章

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

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

  2. HBase(七)Hbase过滤器

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

  3. Hbase过滤器

    Hbase过滤器简介 HBase的基本API,包括增.删.改.查等,增.删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查 ...

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

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

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

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

  6. HBase过滤器(转载)

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

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

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

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

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

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

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

随机推荐

  1. Python中使用type、metaclass动态创建方法和属性

    1: type() 我们知道动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Person的class: class Person(obj ...

  2. 浅谈CSS浮动属性

    要介绍css的float浮动属性,就必须先了解一下标准文档流 标准文档流:   在没有css的干预下,块级元素独占一行,可以设置宽高,行内元素并排显示,宽高自动填充.   HTML页面的标准文档流(默 ...

  3. 全新定义!免费开源ERP平台如何玩转工业互联网

    简述 IoT Box通过Wifi.蓝牙.USB.网线等方式连接设备.IoT再通过互联网连接到Odoo服务器 Odoo的各种应用通过IoT操作各种设备.例如,PoS应用通过IoT操作小票打印机.银行刷卡 ...

  4. Python之路【第七篇】:Python装饰器

    阅读目录 一.装饰器 1.装饰器的概念 #装饰器定义:本质就是函数,功能是为其他函数添加附加功能 二.装饰器需要遵循的原则 #原则: 1.不修改被修饰函数的源代码 2.不修改被修饰函数的调用方式 装饰 ...

  5. Vagrant 构建 Linux 开发环境

    Vagrant 是一个简单易用的部署工具,用英文说应该是 Orchestration Tool .它能帮助开发人员迅速的构建一个开发环境,帮助测试人员构建测试环境, Vagrant 基于 Ruby 开 ...

  6. 引入外部 CDN失效时--怎么加载本地资源文件(本文以jquery为例)

    相信大家都使用过CDN静态资源库,比如下面 CDN官方静态资源库:https://cdnjs.com/ 七牛前端公开库:http://staticfile.org   (vue,react,nl都有) ...

  7. synchronized的四种作用域以及不能被继承解析

    synchronized是java中用于同步的关键字,其典型的作用域如下所示. 1 对象锁 @Slf4j public class SynchronizedExample1 { private fin ...

  8. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之八 || API项目整体搭建 6.3 异步泛型仓储+依赖注入初探

    代码已上传Github+Gitee,文末有地址 番外:在上文中,也是遇到了大家见仁见智的评论和反对,嗯~说实话,积极性稍微受到了一丢丢的打击,不过还好,还是有很多很多很多人的赞同的,所以会一直坚持下去 ...

  9. 机器学习之十一问支持向量机(SVM)

    推导了支持向量机的数学公式后,还需要对比和总结才能更深入地理解这个模型,所以整理了十一个关于支持向量机的问题. 第一问:支持向量机和感知机(Perceptron)的联系? 1.相同点: 都是一种属于监 ...

  10. 细说mysql索引

    本文从如何建立mysql索引以及介绍mysql的索引类型,再讲mysql索引的利与弊,以及建立索引时需要注意的地方 首先:先假设有一张表,表的数据有10W条数据,其中有一条数据是nickname='c ...