【问题标题】:Get multiple columns based on single column filter in Hbase基于Hbase中的单列过滤器获取多列
【发布时间】:2014-06-25 15:45:53
【问题描述】:

我的列族为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 但不是列 Value ,与 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 列的条件满足?有可能还是行键是唯一的方法?

谢谢。

【问题讨论】:

    标签: hbase


    【解决方案1】:

    您可以为此使用 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"))));
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-24
      • 2021-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多