(原文地址:http://www.jb51.cc/cata/500599,转载麻烦带上原文地址。hadoop hive hbasemahout storm spark kafka flume,等连载中,做个爱分享的人)
HBase 提供scan 方式来做批量数据扫描。并提供filter机制提供更为精准的数据过滤。并且过滤过程在服务端进行。scan通过setFilter添加过滤器,实现分页、多条件查询等需求。
org.apache.hadoop.hbase.filter.FilterBase 。过滤器的基类,HBase提供了十几个实现类,分别做不同类型的过滤功能。各个过滤器还有各种不一样的过滤条件比较器。过滤功能相当的多。
1、Comparision Filters (比较类型,对行健,列镞等进行比较)
1.1 RowFilter
1.2 FamilyFilter
1.3 QualifierFilter
1.4 ValueFilter
1.5 DependentColumnFilter
2、Dedicated Filters (特殊用途类型,如分页等用途)
2.1 SingleColumnValueFilter (对列的数据过滤)
2.2 SingleColumnValueExcludeFilter
2.3 PrefixFilter
2.4 PageFilter(分页)
2.5 KeyOnlyFilter
2.6 FirstKeyOnlyFilter
2.7 TimestampsFilter
2.8 RandomRowFilter
3、Decorating Filters(Decorating )
3.1SkipFilter
3.2 WhileMatchFilters
// 过滤器,为scan设置过滤器 。 sql: SELECT * FROM user u where id <> 2;
Scan scan = new Scan();
CompareOp compareOp = CompareOp.NO_OP; // != 比较符;
WritableByteArrayComparable comparable = new BinaryComparator(rowkey.getBytes()) //二进制比较器;
RowFilter rowFilter = new RowFilter(compareOp,comparable); //rowkey 过滤器
scan .setFilter(rowFilter);
final ResultScanner scanner = hTable.getScanner(scan);
for (Result result : scanner) {
final byte[] value = result.getValue(columnFamily .getBytes(),colume.getBytes()); }