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

1.创建测试表studnet1

Vi Student1.java

  1. import java.io.IOException;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.client.HBaseAdmin;
  4. import org.apache.hadoop.hbase.client.HTable;
  5. import org.apache.hadoop.hbase.HColumnDescriptor;
  6. import org.apache.hadoop.hbase.HTableDescriptor;
  7. import org.apache.hadoop.hbase.util.Bytes;
  8. import org.apache.hadoop.hbase.client.Put;
  9.  
  10. public class Student1{
  11. public static void main(String[] args){
  12. HBaseConfiguration config = new HBaseConfiguration();
  13. config.set("hbase.zookeeper.quorum", "h201,h202,h203");
  14. String tablename = new String("student1");
  15. try{
  16. HBaseAdmin admin = new HBaseAdmin(config);
  17. if(admin.tableExists(tablename)){
  18. admin.disableTable(tablename);
  19. admin.deleteTable(tablename);
  20. }
  21. HTableDescriptor tableDesc = new HTableDescriptor(tablename);
  22. tableDesc.addFamily(new HColumnDescriptor("cf1"));
  23.  
  24. admin.createTable(tableDesc);
  25. admin.close();
  26.  
  27. HTable table = new HTable(config, Bytes.toBytes("student1"));
  28. Put put1 = new Put(Bytes.toBytes("a101"));
  29. put1.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("zs1"));
  30.  
  31. Put put2 = new Put(Bytes.toBytes("a102"));
  32. put2.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("ls1"));
  33.  
  34. Put put3 = new Put(Bytes.toBytes("a103"));
  35. put3.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("ww1"));
  36.  
  37. table.put(put1);
  38. table.put(put2);
  39. table.put(put3);
  40. table.close();
  41. } catch(IOException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  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()来判断

  1. import java.io.IOException;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.client.HTable;
  4. import org.apache.hadoop.hbase.client.Scan;
  5. import org.apache.hadoop.hbase.client.ResultScanner;
  6. import org.apache.hadoop.hbase.client.Result;
  7. import org.apache.hadoop.hbase.util.Bytes;
  8. import org.apache.hadoop.hbase.KeyValue;
  9. import org.apache.hadoop.hbase.filter.RowFilter;
  10. import org.apache.hadoop.hbase.filter.Filter;
  11. import org.apache.hadoop.hbase.filter.BinaryComparator;
  12. import org.apache.hadoop.hbase.filter.CompareFilter;
  13.  
  14. public class hss1{
  15.  
  16. public static void main(String[] args){
  17. HBaseConfiguration config = new HBaseConfiguration();
  18. config.set("hbase.zookeeper.quorum", "h201,h202,h203");
  19.  
  20. try{
  21. HTable table = new HTable(config, Bytes.toBytes("student1"));
  22. Scan scan = new Scan();
  23. Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator("a101".getBytes()));
  24. scan.setFilter(filter1);
  25. ResultScanner rst = table.getScanner(scan);
  26. for (Result r:rst){
  27. for (KeyValue kv : r.raw()) {
  28. StringBuffer s1 = new StringBuffer()
  29. .append(Bytes.toString(kv.getRow())).append(":")
  30. .append(Bytes.toString(kv.getFamily())).append(",")
  31. .append(Bytes.toString(kv.getQualifier())).append(",")
  32. .append(Bytes.toString(kv.getValue()));
  33. System.out.println(s1.toString());
  34. }
  35. }
  36. rst.close();
  37. table.close();
  38. } catch(IOException e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. }

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. 【MQ】消息队列及常见MQ比较

    一.什么是消息队列 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用.消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰. ...

  2. 访问者模式 Visitor 行为型 设计模式(二十七)

    访问者模式 Visitor    <侠客行>是当代作家金庸创作的长篇武侠小说,新版电视剧<侠客行>中,开篇有一段独白:  “茫茫海外,传说有座侠客岛,岛上赏善罚恶二使,每隔十年 ...

  3. css中的position(定位)

    一.position语法与结构 position语法: position : static absolute relative position参数:static : 无特殊定位,对象遵循HTML定位 ...

  4. 衡量GDP,哪种夜间灯光数据更靠谱?

    <新科学家>杂志报道,随着经济发展,一些国家通常会新修道路,扩展居民区,这两项措施都会使从太空中看到的灯光强度增加.不少学者利用夜间灯光数据与国内生产总值统计数据进行比较,发现从太空中看到 ...

  5. 2018-12-25 VS Code英汉词典v0.0.8: 批量翻译文件部分命名

    续前文: VS Code英汉词典进化效果演示: 翻译文件所有命名 vscode"英汉词典"插件地址: 官方链接 现在实现的效果比之前的演示差很多, 因为executeDocumen ...

  6. lombok的安装

    Lombok简介 Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法.官方地址:https:/ ...

  7. C# 三种打印方式含代码

    一:C#代码直接打印pdf文件(打印质保书pdf文件) 引用: 代码注释很详细了. private void btn_pdf_Click(object sender, RoutedEventArgs ...

  8. python --- 冒泡排序算法

    别想太多了,这个冒泡排序就是我们脑海中想到的那个冒泡,就好像是气泡一样,较小的元素比较轻,从而要往上浮出来, 冒泡排序算法. 要对‘气泡’序列处理若干遍.所谓一遍处理,就是自底向上检查一遍这个序列,并 ...

  9. mysql的学习笔记(三)

    1.外键约束(保持数据一致,完整.实现一对多或一对一) 父表(参照的表)和子表(有外键列的表)必须使用相同的存储引擎InnoDB,禁止使用临时表. 外键列和参照列必须具有相似的数据类型.其中数字的长度 ...

  10. Python爬虫入门教程 41-100 Fiddler+夜神模拟器+雷电模拟器配置手机APP爬虫部分

    爬前叨叨 从40篇博客开始,我将逐步讲解一下手机APP的爬虫,关于这部分,我们尽量简化博客内容,在这部分中可能涉及到一些逆向,破解的内容,这部分尽量跳过,毕竟它涉及的东西有点复杂,并且偏离了爬虫体系太 ...