我正在尝试使用过滤器列表来检索范围内的行,但未成功。
以下是我的代码段。

我想检索1000到2000之间的数据。

HTable表=新的HTable(conf,“TRAN_DATA”);

    List<Filter> filters = new ArrayList<Filter>();

    SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("TRAN"),
              Bytes.toBytes("TRAN_ID"),
              CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("1000")));
    filter1.setFilterIfMissing(true);
    filters.add(filter1);

    SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("TRAN"),
              Bytes.toBytes("TRAN_ID"),
              CompareFilter.CompareOp.LESS,new BinaryComparator(Bytes.toBytes("2000")));

    filters.add(filter2);

    FilterList filterList = new FilterList(filters);

    Scan scan = new Scan();
    scan.setFilter(filterList);
    ResultScanner scanner1 = table.getScanner(scan);

    System.out.println("Results of scan #1 - MUST_PASS_ALL:");
    int n = 0;

    for (Result result : scanner1) {
        for (KeyValue kv : result.raw()) {
            System.out.println("KV: " + kv + ", Value: "
                    + Bytes.toString(kv.getValue()));
        {
            n++;

        }
    }
    scanner1.close();

尝试使用所有可能的方式
1. SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes(“TRANSACTIONS”),
Bytes.toBytes(“TRANS_ID”),
CompareFilter.CompareOp.LESS,新的SubstringComparator(“5000”));
  • SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes(“TRANSACTIONS”),
    Bytes.toBytes(“TRANS_ID”),
    CompareFilter.CompareOp.LESS,Bytes.toBytes(“5000”));以上方法均无效:(
  • 最佳答案

    在这里肯定要关闭的一件事是,在创建FILTERLIST时,还必须指定FilterList.Operator,否则不能确定filterlist如何处理多个过滤器。在你的情况下应该是这样的:

    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, filters);
    

    看看是否有帮助。

    关于hadoop - HBase “between”过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10429412/

    10-10 12:46