HBase addColumn和setFilter

时间:2015-11-25 11:11:26

标签: java hadoop hbase bigdata

我正在扫描HBase,只使用我想要的特定列名称设置扫描程序,使用列过滤器设置一系列列。

添加单个行:

known_fields.forEach(known_field ->scanner.addColumn("x".getBytes(), known_field.getBytes()));

我还要添加一个列过滤器:

scanner.setFilter(new ColumnRangeFilter(start, true, stop, true));

所有变量都有正确的值。我正在扫描如下

    scanner.setCacheBlocks(false);
    scanner.setBatch(1000);

    ResultScanner results = null;
    Table table = null;
    try {
        table = connection.getTable("table_test");
        results = table.getScanner(scanner);
        boolean hasPerformed;
        for (final Result result : results) {
        ...

results始终为空。但是,如果我注释掉scanner.setFilter(new ColumnRangeFilter(start, true, stop, true));scanner.addColumn(,则结果非常好。它没有与组合合作。

如何实现已知列和一系列列的组合?

1 个答案:

答案 0 :(得分:2)

如果scanner.addColumn的列数较少,则可以将FilterListMUST_PASS_ONE运算符一起使用,并将其传递给ColumnRangeFilter。添加要扫描的列在这种情况下等效于添加具有重合的开始和结束列的ColumnRangeFilter。 E.g。

Filter filter = new FilterList(FilterList.Operator.MUST_PASS_ONE);
known_fields.forEach(known_field -> 
      filter.addFilter(new ColumnRangeFilter(known_field.getBytes(), true, 
                                             known_field.getBytes(), true));
filter.add(new ColumnRangeFilter(start, true, stop, true));
scan.setFilter(filter);