2011-12-29 116 views
1

版本:HBase Cloudera CDH3U2。
在HBase中過濾

我已經使用Java API在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 result = hTable.get(get); 

    List keyValueList = result.getColumn(columnFamily, columnName); 

這裏我米得到keyValueList.size()是零,並且如果我米不施加任何濾波器,I m到處keyValueList.size()爲3,和的值是(1,5,7 )。

我想5和7

幫助的結果我做到這一點。

在此先感謝

回答

0

如何存儲值?你用Bytes.toBytes(「2」)還是Bytes.toBytes(2)存儲它們?你必須在這裏使用相同的東西。默認比較器是BinaryComparator,它按字典順序比較字節轉換值,但字符串和整數的轉換方法不同。因此,無論是在插入還是比較時都使用整數,或者在兩種情況下都使用字符串。

嘗試使用Bytes.toBytes(「2」)代替。

+0

我插入像Bytes.toBytes(2) – Nageswaran 2011-12-29 12:02:56

+0

試過,但沒有工作。我在插入和搜索中都使用long – Nageswaran 2011-12-29 13:05:01

0

你說你試圖存儲Long值?那麼你不應該把Bytes.toBytes(2L)

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

Must_Pass_All運營商是一個懶惰的操作,即如果它沒有找到filterlist內的過濾器的任何值,它將停止執行。

嘗試:

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

而且,你只有一個過濾器設置,所以其良好的不使用任何filterlist。僅當您希望在桌上應用多個過濾器時才使用它。