乐趣区

关于hbase:HBase内置过滤器java-api的总结

1、RowFilter: 筛选出匹配的所有的行 (应用过)

//rowkey 等于 test|id9
Filter filter=new RowFilter(CompareOperator.EQUAL,new BinaryComparator(Bytes.toBytes("test|id9")));

2、PrefixFilter: 筛选出具备特定前缀的行健的数据

//rowkey 以 test 结尾
Filter filter=new PrefixFilter(Bytes.toBytes("test"));

3、KeyOnlyFilter:只返回每行的行健

// 只返回每行的行键, 但值全是空
Filter filter=new KeyOnlyFilter();

4、RandomRowFilter: 依照肯定的几率来返回随机的后果集

// 返回随机的数据
Filter filter=new RandomRowFilter(0.5f);

5、InclusiveStopFilter: 扫描的时候,咱们能够设置一个开始行键和一个终止行键,默认状况下,这个行键的返回是前闭后开区间,即蕴含起始行,但不蕴含终止行,如果咱们想要同时蕴含起始行和终止行

// 遇到 rowkey 等于 test|id4 进行查问
Filter filter=new InclusiveStopFilter(Bytes.toBytes("test|id4"));

6、FirsterKeyOnlyFilter: 返回的后果集中只蕴含第一列的数据它在找到每行的第一列之后会进行扫描

// 筛选出第一个每个第一个单元格
Filter filter=new FirstKeyOnlyFilter();

7、ColumnsPrefixFilter: 依照列名的前缀来筛选单元格,如果咱们想要对返回的列的前缀加以限度的话,能够应用这个过滤器

// 列名以 ss 结尾
Filter filter=new ColumnPrefixFilter(Bytes.toBytes("ss"));

8、ValueFilter: 依照具体的值来筛选单元格

// 值中蕴含 one 的记录
Filter filter=new ValueFilter(CompareOperator.EQUAL,new SubstringComparator("one"));

9、ColumnsCountGetFilter: 这个过滤器来返回每行最多返回多少列,并在遇到一行的列数超过咱们所设置的限度值的时候,完结扫描操作

Filter ccf=new ColumnCountGetFilter(2);//OK 如果忽然发现一行中的列数超过设定的最大值时,整个扫描操作会进行 

10、SingleColumnValueFilter: 用一列的值决定这一行的数据是否被过滤

SingleColumnValueFilter scvf=new SingleColumnValueFilter(Bytes.toBytes("colfam1"),
Bytes.toBytes("qual2"),CompareFilter.CompareOp.NOT_EQUAL,new SubstringComparator("BOGUS"));
scvf.setFilterIfMissing(false);
scvf.setLatestVersionOnly(true);//OK

11、SingColumnValueExcludeFilter: 这个与 10 种的过滤器惟一的区别就是,作为筛选条件的列的不会蕴含在返回的后果中。

12、SkipFilter: 这是一种附加过滤器,其与 ValueFilter 联合应用,如果发现一行中的某一列不符合条件,那么整行就会被过滤掉

Filter skf=new SkipFilter(vf);//OK 发现某一行中的一列须要过滤时,整个行就会被过滤掉 

13、WhileMatchFilter: 如果你想要在遇到某种条件数据之前的数据时,就能够应用这个过滤器;当遇到不合乎设定条件的数据的时候,整个扫描也就完结了

Filter wmf=new WhileMatchFilter(rf);//OK 相似于 Pythonitertools 中的 takewhile

14、FilterList: 用于综合应用多个过滤器 (应用过)

List<Filter>filters=new ArrayList<Filter>();filters.add(rf);
filters.add(vf);FilterList fl=?new FilterList(FilterList.Operator.MUST_PASS_ALL,filters);//OK 综合应用多个过滤器,AND 和 OR 两种关系

通过 Filter 获取后果集案例

FilterList filterList=new FilterList();
Filter filter=new RowFilter(CompareOperator.EQUAL,new BinaryComparator(Bytes.toBytes("test|id9")));
filterList.addFilter(filter);

ResultScanner www = HBaseUtil.getScanner("www",filterList);

for (Result re:www){for(Cell kv:re.rawCells()){System.out.println("====="+kv.toString());
                  System.out.println("列族:"+Bytes.toString(kv.getFamilyArray(),kv.getFamilyOffset(),kv.getFamilyLength()));
                  System.out.println("RowKey:"+Bytes.toString(kv.getRowArray(),kv.getRowOffset(),kv.getRowLength()));
                  System.out.println("列名:"+Bytes.toString(kv.getQualifierArray(),kv.getQualifierOffset(),kv.getQualifierLength()));
                  System.out.println("值:"+Bytes.toString(kv.getValueArray(),kv.getValueOffset(),kv.getValueLength()));
                  System.out.println("=================================================================================");

     }
}

退出移动版