根据Hbase中的单列过滤器获取多个列

时间:2014-05-26 12:22:09

标签: hbase

我的列系列为cf1,我想访问该行EqID='Eq1'所有列, 我使用了 ValueFilter ,但它只返回EqID列。

hbase(main):004:0> scan 'abc', { COLUMNS => ['cf1:Value', 'cf1:EqID'],FILTER => "ValueFilter( =, 'binaryprefix:Eq1' )" }
ROW                   COLUMN+CELL                                               
 row1                 column=cf1:EqID, timestamp=1401092981867, value=Eq1 

上面我得到了row1但没有列,与get相似,

get 'abc', 'row1', {FILTER => "ValueFilter( =, 'binaryprefix:Eq1' )"}
   COLUMN                CELL                                                      
     cf1:EqID             timestamp=1401092981867, value=Eq1                        
    1 row(s) in 0.0120 seconds

我没有获得 Value 列的值。是否可以获得其他列的值,其中1列的条件满足?是否可能或行键是唯一的方法?

感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用SingleColumnValueFilter。

如果您使用的是java,那么您可以查看以下代码

HTable hTable = new HTable(conf, Bytes.toBytes("tableName"));

Filter f = new SingleColumnValueFilter(Bytes.toBytes("EqID"), Bytes.toBytes("EqID"), CompareOp.EQUAL, Bytes.toBytes("Eq1"));
Scan s = new Scan();
s.setFilter(f);

ResultScanner scanner = hTable.getScanner(s);

for (Result r : scanner)
 {
  System.out.println(Bytes.toString(r.getValue(Bytes.toBytes("EqID"), Bytes.toBytes("EqID"))));
 }