各种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();
相关推荐
- `bloomFilter`和`scope`: 分别是布隆过滤器类型和列的复制范围。 5. **HBase Shell常用命令**: HBase Shell提供了与HBase交互的命令行工具,包括创建表、删除表、插入数据、查询数据等操作。例如: - `create...
通过深入学习HBase,你可以掌握如何在大数据环境中构建高性能的实时数据存储系统。记住,理论知识与实践相结合是掌握HBase的关键,通过实际操作和项目经验,你会对HBase有更深入的理解。提供的“hbase 培训”资料...
【HBase 学习】 HBase 是一个分布式、列式存储的开源数据库,基于 Google BigTable 的设计理念,专为处理大规模结构化和半结构化数据而设计。它运行在 HDFS(Hadoop 分布式文件系统)之上,提供高可靠性和高性能的...
二、HBase的数据模型 1. 行:行由行键(Row Key)唯一标识,行键是字节序列,决定了行的物理存储位置。 2. 列族(Column Family):是数据的逻辑分组,列族内的列共享相同的存储配置。 3. 列限定符(Column ...
除了这些基本过滤器外,HBase还支持复合过滤器,如FilterList,它可以组合多个过滤器并按顺序或逻辑运算符(如AND、OR)应用它们。这使得我们能够构建更复杂的查询逻辑。 使用过滤器的一个关键步骤是理解`Filter`...
**HBase实验报告** 在本实验中,我们主要聚焦于HBase,这是一个基于谷歌Bigtable设计的开源...在后续的学习和实践中,应深入研究HBase的其他高级特性,如Region Split、Compaction等,以便更好地应用到实际项目中。
《HBase企业应用开发实战》是一本深度剖析HBase在实际业务场景中应用的专业书籍,旨在帮助读者理解和掌握HBase的核心功能、...通过学习这本书,你将能够更好地利用HBase解决实际问题,构建高效稳定的大数据解决方案。
通过深入学习HBase 0.94的源代码,开发者可以了解到如何处理分布式一致性、数据分区、数据复制等复杂问题,这对于构建大规模分布式系统非常有价值。同时,了解源代码有助于开发者更好地利用HBase特性,优化数据访问...
《HBase权威指南中文版》是一本深入探讨大数据领域中分布式数据库HBase的专著。这本书旨在帮助读者理解和...通过学习本书,读者不仅可以掌握HBase的基本操作,还能了解到如何在实际项目中解决大数据存储和查询的挑战。
- **下载HBase**:从官方网站下载最新版本的HBase源代码或者二进制包。 - **配置HBase**:编辑HBase的核心配置文件`hbase-site.xml`,设置HBase的核心参数,如Zookeeper服务器地址等。 - **启动HBase服务**:启动...
在Java中操作HBase,过滤数据是至关重要的任务,特别是在处理大数据时,高效地筛选出所需信息能够极大地提升...在实际开发中,结合所提供的jar包,你可以更深入地学习和实践这些概念,进一步提升你的HBase操作技能。
学习如何创建、查询和操作HBase表,以及如何进行数据导入导出,对于实际开发和运维至关重要。此外,书中还会讨论HBase与其他Hadoop生态系统的集成,如Hive、Pig和MapReduce,这使得HBase成为大数据分析链路中的重要...
《HBase权威指南》是大数据领域的一本经典著作,它深入浅出地介绍了...通过深入学习和实践这些示例代码,读者不仅能熟悉HBase的基本操作,还能了解其在大数据环境中的实际应用,为后续的大数据项目开发打下坚实基础。
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。这个项目通常涉及到配置管理以及针对 HBase 数据库的过滤功能。...
- **统一的数据处理框架**:Spark支持多种类型的数据处理,包括批处理、流处理、机器学习等。 - **容错机制**:Spark通过RDD的血统机制提供了强大的容错能力。 - **模块化设计**:Spark由多个可选模块组成,如Spark ...
#### 二、淘宝选择HBase的原因 淘宝作为中国最大的电子商务平台之一,面临海量的数据管理和处理挑战。选择HBase作为其数据存储方案的主要原因包括: - **数据量巨大**:淘宝每天产生的数据量巨大,需要一个能够...
这个 Hbase 0.94 API 压缩包包含了官方 API 文档,解压后通过 index.html 访问,可以帮助开发者详细了解 API 使用方法和 HBase 的核心概念,对于学习和开发基于 HBase 的应用非常有帮助。通过深入理解和实践这些知识...