1

バージョン: HBase Cloudera CDH3U2。

Java API を使用して long データ型の値を HBase に挿入しました。

    Get get = new Get(Bytes.toBytes("111"));

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

 singleColumnValueFilter = new SingleColumnValueFilter(columnFamily,columnName , CompareOp.GREATER_OR_EQUAL, Bytes.toBytes(2));

    filterList.addFilter(singleColumnValueFilter);

    get.setFilter(filterList);
    get.setMaxVersions(10);

    結果 result = hTable.get(get);

    リスト keyValueList = result.getColumn(columnFamily, columnName);

ここでは、keyValueList.size() がゼロであることを取得しています。フィルターを適用しない場合、keyValueList.size() は 3 であり、値は (1,5,7) です。

5と7の結果が欲しいです。

これを行うのを手伝ってください。

前もって感謝します

4

3 に答える 3

0

Long 値を格納しようとしていると言いましたか? では、入れるべきではありませんでしたBytes.toBytes(2L)か?

于 2012-04-03T19:54:05.387 に答える
0
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);

Must_Pass_All 演算子は遅延操作です。つまり、filterlist 内でフィルターの値が見つからない場合、実行を停止します。

試す:

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);

さらに、フィルタ セットは 1 つしかないため、フィルタ リストを使用しないことをお勧めします。テーブルに複数のフィルターを適用する場合にのみ使用してください。

于 2016-02-26T23:31:08.863 に答える
0

値をどのように保存しますか? Bytes.toBytes("2") または Bytes.toBytes(2) を使用して保存しますか? ここでも同じものを使用する必要があります。デフォルトのコンパレータはBinaryComparatorで、Byte 変換された値を辞書式に比較しますが、文字列と int では変換方法が異なります。したがって、挿入時と比較時にintを使用するか、両方の場合に文字列を使用します。

代わりに Bytes.toBytes("2") を使用してみてください。

于 2011-12-29T10:58:12.773 に答える