HBase addColumn 和 setFilter

HBase addColumn and setFilter

我正在扫描 HBase,方法是将 Scanner 设置为仅包含我想要的特定列名和使用列过滤器的一系列列。

添加单行:

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(,结果就很好。它不适用于组合。

如何实现已知列与范围列的组合?

如果 scanner.addColumn 的列数较少,您可以使用 FilterListMUST_PASS_ONE 运算符并传递给它乘以 ColumnRangeFilter。添加要扫描的列在这种情况下相当于添加具有重合开始和结束列的 ColumnRangeFilter。例如

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);