hbase addcolumn和setfilter

cig3rfwq  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(325)

我正在扫描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( ,结果非常好。它与组合不起作用。
如何实现已知列和一系列列的组合?

mlmc2os5

mlmc2os51#

如果有少量列 scanner.addColumn ,可以将filterlist与一起使用 MUST_PASS_ONE 运算符并向其传递乘法 ColumnRangeFilter . 在这种情况下,add column to scan相当于add 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);

相关问题