[英]Why SingleColumnValueFilter do not returns true answer on < and > operator?
嗨,我是hbase的新手,正在學習它。 我使用hbase shell創建了一個表,並使用shell將值放入該表中。 但是現在當我想使用這樣的過濾器來獲取thos值時:
HTable table = new HTable(conf, "test");
List<Filter> filters = new ArrayList<Filter>();
SingleColumnValueFilter colValFilter = new SingleColumnValueFilter(Bytes.toBytes("col"), Bytes.toBytes("age")
, CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("118")));
colValFilter.setFilterIfMissing(false);
filters.add(colValFilter);
FilterList fl = new FilterList( FilterList.Operator.MUST_PASS_ALL, filters);
Scan s = new Scan();
s.setFilter(fl);
ResultScanner ss = table.getScanner(s);
JSONArray arr=new JSONArray();
for(Result r:ss){
JSONObject obj=new JSONObject();
for(KeyValue kv : r.raw()){
String column=new String(kv.getQualifier());
String value=new String(kv.getValue());
obj.accumulate(column, value);
}
arr.put(obj);
}
現在,當我運行該程序時,我得到了不同的結果。 就像我得到年齡小於118歲的用戶,但他們仍然得到展示。
我的問題:
為什么選擇SingleColumnValueFilter? 還有其他解決方法嗎?
如果您將hbase shell中的數據(例如put'test put 'test','r1','col:age','19'
存儲為字符串字節,那么當您在BinaryComparator中將其與>進行比較時,它將按字典順序進行比較並返回以'>'開頭的任何字符串
如果要將其表示為整數字節put 'test','r1','col:age','\\x13'
則應將其put 'test','r1','col:age','\\x13'
(十六進制值)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.