我的列系列为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列的条件满足?是否可能或行键是唯一的方法?
感谢。
答案 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"))));
}