hbase 多个过滤器组合(列表)
使用FilterList要保证过滤器的顺序需要使用List<Filter>
private static void mutilFilterData() throws IOException{ Table table = helper.getConnection().getTable(TableName.valueOf("testtable")); List<Filter> filters = new ArrayList<Filter>(); Filter filter1 = new RowFilter(CompareOperator.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes("rowKey60"))); filters.add(filter1); Filter filter2 = new RowFilter(CompareOperator.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("rowKey69"))); filters.add(filter2); Filter filter3 = new QualifierFilter(CompareOperator.EQUAL, new RegexStringComparator("username")); filters.add(filter3); FilterList filterList1 = new FilterList(FilterList.Operator.MUST_PASS_ALL,filters); Scan scan = new Scan(); scan.setFilter(filterList1); ResultScanner scanner1 = table.getScanner(scan); System.out.println("Results of scan #1 - MUST_PASS_ALL:"); int n = 0; for (Result result : scanner1) { for (Cell cell : result.rawCells()) { System.out.println("Cell: " + cell + ", Value: " + Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength())); n++; } } scanner1.close(); table.close(); }
输出结果:
Cell: rowKey60/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user60 Cell: rowKey61/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user61 Cell: rowKey62/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user62 Cell: rowKey63/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user63 Cell: rowKey64/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user64 Cell: rowKey65/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user65 Cell: rowKey66/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user66 Cell: rowKey67/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user67 Cell: rowKey68/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user68 Cell: rowKey69/info:username/1555078771906/Put/vlen=6/seqid=0, Value: user69