1

Filter List を使用して範囲内の行を取得しようとしていますが、うまくいきません。以下は私のコードスニペットです。

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, new SubstringComparator("5000"));

  1. SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("TRANSACTIONS"), Bytes.toBytes("TRANS_ID"), CompareFilter.CompareOp.LESS, Bytes.toBytes("5000")); 上記のアプローチはどれも機能しません:(
4

3 に答える 3

2

ここで確かに外れていることの1つは、FILTERLISTを作成するときに、FilterList.Operatorも指定する必要があることです。そうしないと、filterlistが複数のフィルターをどのように処理するかがわかりません。あなたの場合、それは次のようなものでなければなりません:-

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

これが役立つかどうかを確認してください。

于 2012-05-03T18:45:19.977 に答える
0

大丈夫そうです。1000と2000のbyte[]としてではなく、「1000」と「2000」として永続化したかどうかを確認してください。

残りは私にはうまく見えます。

于 2012-05-03T12:34:34.413 に答える