`
wx1569578408
  • 浏览: 71603 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Hbase 学习(二)各种filter

 
阅读更多

各种filter

今天的主题是Filter,hbase客户端查询的时候,自定义查询filter。

直接上例子吧,不多说别的了,第一个例子是RowFilter的。

复制代码

Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("colfam1"),
Bytes.toBytes("col-0"));
Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,                                               new BinaryComparator(Bytes.toBytes("row-22")));
scan.setFilter(filter1);
ResultScanner scanner1 = table.getScanner(scan);for (Result res : scanner1) {
    System.out.println(res);
}
scanner1.close();

Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,                                              new RegexStringComparator(".*-.5"));
scan.setFilter(filter2);
ResultScanner scanner2 = table.getScanner(scan);for (Result res : scanner2) {
     System.out.println(res);
}
scanner2.close();

Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,                                               new SubstringComparator("-5"));
scan.setFilter(filter3);
ResultScanner scanner3 = table.getScanner(scan);for (Result res : scanner3) {
      System.out.println(res);
}
scanner3.close();

复制代码

 

第二个例子是QualifierFilter的

复制代码

Filter filter = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,                                                  new BinaryComparator(Bytes.toBytes("col-2")));
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {
     System.out.println(result);
}
scanner.close();
Get get = new Get(Bytes.toBytes("row-5"));
get.setFilter(filter);
Result result = table.get(get);

复制代码

 

第三个例子是ValueFilter

复制代码

Filter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL,                                                new SubstringComparator(".4"));
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {       for (KeyValue kv : result.raw()) {
             System.out.println("KV: " + kv + ", Value: " +
             Bytes.toString(kv.getValue()));
       }
}
scanner.close();
Get get = new Get(Bytes.toBytes("row-5"));
get.setFilter(filter);
Result result = table.get(get);for (KeyValue kv : result.raw()) {
     System.out.println("KV: " + kv + ", Value: " +
     Bytes.toString(kv.getValue()));
}

复制代码

 

第四个例子是PageFilter,分页的filter

复制代码

Filter filter = new PageFilter(15);int totalRows = 0;byte[] lastRow = null;while (true) {
    Scan scan = new Scan();
    scan.setFilter(filter);    if (lastRow != null) {         byte[] startRow = Bytes.add(lastRow, POSTFIX);
        System.out.println("start row: " +Bytes.toStringBinary(startRow));
         scan.setStartRow(startRow);
    }
    ResultScanner scanner = table.getScanner(scan);  
    int localRows = 0;
    Result result;    while ((result = scanner.next()) != null) {
        System.out.println(localRows++ + ": " + result);
         totalRows++;
         lastRow = result.getRow();
   }
   scanner.close();   if (localRows == 0) break;
}
System.out.println("total rows: " + totalRows);

复制代码

 

第五个例子是InclusiveStopFilter,它是什么意思呢,就是扫描到某个rowkey就停止,下面的例子是从row-3开始扫描,一直扫描到row-5结束。

复制代码

Filter filter = newInclusiveStopFilter(Bytes.toBytes("row-5"));
Scan scan = new Scan();
scan.setStartRow(Bytes.toBytes("row-3"));
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);    for (Result result : scanner) {
    System.out.println(result);
}
scanner.close();

复制代码

 

第六个SingleColumnValueFilter,这个是我们最常用的filter,我觉得很好用。

复制代码

SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("colfam1"),
Bytes.toBytes("col-5"), CompareFilter.CompareOp.NOT_EQUAL,new SubstringComparator("val-5"));
filter.setFilterIfMissing(true);
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {  for (KeyValue kv : result.raw()) {
     System.out.println("KV: " + kv + ", Value: " +
     Bytes.toString(kv.getValue()));
  }
}
scanner.close();
Get get = new Get(Bytes.toBytes("row-6"));
get.setFilter(filter);
Result result = table.get(get);
System.out.println("Result of get: ");for (KeyValue kv : result.raw()) {
     System.out.println("KV: " + kv + ", Value: " +
     Bytes.toString(kv.getValue()));
}

复制代码

 

第七个FilterList,它有两个选项,需要全部通过,还是一个通过就行,MUST_PASS_ALL,MUST_PASS_ONE。

复制代码

List<Filter> filters = new ArrayList<Filter>();
Filter filter1 = newRowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row-03")));
filters.add(filter1);302Filter filter2 = newRowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row-06")));
filters.add(filter2);
Filter filter3 = newQualifierFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator("col-0[03]"));
filters.add(filter3);
FilterList filterList1 = new FilterList(filters);
Scan scan = new Scan();
scan.setFilter(filterList1);
ResultScanner scanner1 = table.getScanner(scan);for (Result result : scanner1) {for (KeyValue kv : result.raw()) {
    System.out.println("KV: " + kv + ", Value: " +
    Bytes.toString(kv.getValue()));
    }
}
scanner1.close();
FilterList filterList2 = new FilterList(

FilterList.Operator.MUST_PASS_ONE, filters);
scan.setFilter(filterList2);
ResultScanner scanner2 = table.getScanner(scan); for (Result result : scanner2) {     for (KeyValue kv : result.raw()) {
    System.out.println("KV: " + kv + ", Value: " +
    Bytes.toString(kv.getValue()));
    }
}
scanner2.close();

复制代码


转载于:https://my.oschina.net/u/923508/blog/413120

分享到:
评论

相关推荐

    hbase学习笔记

    - `bloomFilter`和`scope`: 分别是布隆过滤器类型和列的复制范围。 5. **HBase Shell常用命令**: HBase Shell提供了与HBase交互的命令行工具,包括创建表、删除表、插入数据、查询数据等操作。例如: - `create...

    hbase 学习 hbase原理 hbase资料

    通过深入学习HBase,你可以掌握如何在大数据环境中构建高性能的实时数据存储系统。记住,理论知识与实践相结合是掌握HBase的关键,通过实际操作和项目经验,你会对HBase有更深入的理解。提供的“hbase 培训”资料...

    hbase的学习

    【HBase 学习】 HBase 是一个分布式、列式存储的开源数据库,基于 Google BigTable 的设计理念,专为处理大规模结构化和半结构化数据而设计。它运行在 HDFS(Hadoop 分布式文件系统)之上,提供高可靠性和高性能的...

    HBase官方文档中文版-HBase手册中文版

    二、HBase的数据模型 1. 行:行由行键(Row Key)唯一标识,行键是字节序列,决定了行的物理存储位置。 2. 列族(Column Family):是数据的逻辑分组,列族内的列共享相同的存储配置。 3. 列限定符(Column ...

    Hadoop学习四十二:HBase 过滤器

    除了这些基本过滤器外,HBase还支持复合过滤器,如FilterList,它可以组合多个过滤器并按顺序或逻辑运算符(如AND、OR)应用它们。这使得我们能够构建更复杂的查询逻辑。 使用过滤器的一个关键步骤是理解`Filter`...

    Hbase实验报告.pdf

    **HBase实验报告** 在本实验中,我们主要聚焦于HBase,这是一个基于谷歌Bigtable设计的开源...在后续的学习和实践中,应深入研究HBase的其他高级特性,如Region Split、Compaction等,以便更好地应用到实际项目中。

    HBase企业应用开发实战-高清

    《HBase企业应用开发实战》是一本深度剖析HBase在实际业务场景中应用的专业书籍,旨在帮助读者理解和掌握HBase的核心功能、...通过学习这本书,你将能够更好地利用HBase解决实际问题,构建高效稳定的大数据解决方案。

    hbase0.94java源代码

    通过深入学习HBase 0.94的源代码,开发者可以了解到如何处理分布式一致性、数据分区、数据复制等复杂问题,这对于构建大规模分布式系统非常有价值。同时,了解源代码有助于开发者更好地利用HBase特性,优化数据访问...

    HBase权威指南中文版

    《HBase权威指南中文版》是一本深入探讨大数据领域中分布式数据库HBase的专著。这本书旨在帮助读者理解和...通过学习本书,读者不仅可以掌握HBase的基本操作,还能了解到如何在实际项目中解决大数据存储和查询的挑战。

    hbase-hadoop+database系统入门书籍

    - **下载HBase**:从官方网站下载最新版本的HBase源代码或者二进制包。 - **配置HBase**:编辑HBase的核心配置文件`hbase-site.xml`,设置HBase的核心参数,如Zookeeper服务器地址等。 - **启动HBase服务**:启动...

    java操作Hbase之比较过滤器RowFilter的使用源码

    在Java中操作HBase,过滤数据是至关重要的任务,特别是在处理大数据时,高效地筛选出所需信息能够极大地提升...在实际开发中,结合所提供的jar包,你可以更深入地学习和实践这些概念,进一步提升你的HBase操作技能。

    HBase:权威指南(中文版)

    学习如何创建、查询和操作HBase表,以及如何进行数据导入导出,对于实际开发和运维至关重要。此外,书中还会讨论HBase与其他Hadoop生态系统的集成,如Hive、Pig和MapReduce,这使得HBase成为大数据分析链路中的重要...

    《HBase权威指南》示例代码

    《HBase权威指南》是大数据领域的一本经典著作,它深入浅出地介绍了...通过深入学习和实践这些示例代码,读者不仅能熟悉HBase的基本操作,还能了解其在大数据环境中的实际应用,为后续的大数据项目开发打下坚实基础。

    hbase 1.2.0源码

    HBase 1.2.0是该数据库的一个稳定版本,包含了众多优化和改进,对于想要深入理解HBase工作原理或者进行大数据分析的学习者来说,研究其源码是非常有价值的。 一、HBase架构与核心概念 1. 表与Region:HBase中的...

    tools4j-config-provider-hbase-filter-0.12.2.zip

    【标题】"tools4j-config-provider-hbase-filter-0.12.2.zip" 提供的是一个名为 tools4j-config-provider-hbase-filter 的开源项目,版本号为 0.12.2。这个项目通常涉及到配置管理以及针对 HBase 数据库的过滤功能。...

    hadoop、hbase、hive等相关面试问题

    - **统一的数据处理框架**:Spark支持多种类型的数据处理,包括批处理、流处理、机器学习等。 - **容错机制**:Spark通过RDD的血统机制提供了强大的容错能力。 - **模块化设计**:Spark由多个可选模块组成,如Spark ...

    HBase在淘宝的应用和优化

    #### 二、淘宝选择HBase的原因 淘宝作为中国最大的电子商务平台之一,面临海量的数据管理和处理挑战。选择HBase作为其数据存储方案的主要原因包括: - **数据量巨大**:淘宝每天产生的数据量巨大,需要一个能够...

    Hbase 0.94 api

    这个 Hbase 0.94 API 压缩包包含了官方 API 文档,解压后通过 index.html 访问,可以帮助开发者详细了解 API 使用方法和 HBase 的核心概念,对于学习和开发基于 HBase 的应用非常有帮助。通过深入理解和实践这些知识...

Global site tag (gtag.js) - Google Analytics