2014-03-31 40 views
1

我有一个Hbase表,其中包含以下说明。Hbase - 根据列名前缀获取行的列名称

对于一个行键,我的列的形式应该是a_1,a_2,a_3,b_1,c_1,C_2等格式的复合键格式。

我行的假设之一是形式

row key - row1 
column family - c1 
columns - a_1, a_2,a_3,b_1,b_2,c_1,C_2,d_9,d_99 

我可以通过任何操作检索A,B,C的,d为对应于row1列,我不打扰关于什么是后缀对于a,b,c ...

我可以获取给定行的所有列名称,通过将行键分割为其第一部分并将其发布,将它们添加到set中。我很担心,如果有更好的方式来完成它通过过滤器或其他hbase方式完成,请评论...

+0

将rowkey更改为rowkey_columnpart1_columnpart2更好吗? –

+0

有一个前缀过滤器,所以你会得到以某个前缀(a b或c)开头的所有列,这会有帮助吗? – Udy

+0

@Udy在这里的问题是,我没有在以前的给定的行键的列名信息。 –

回答

0

您可以使用COlumnPrefixFilter。你可以看到下面的代码

Configuration hadoopConf = new Configuration(); 
    hadoopConf.set("hbase.zookeeper.quorum", "localhost"); 
    hadoopConf.set("hbase.zookeeper.property.clientPort", "2181"); 

    HTable hTable = new HTable(hadoopConf, "KunderaExamples"); 

    Scan scan = new Scan(); 
    scan.setFilter(new ColumnPrefixFilter("A".getBytes())); 
    ResultScanner scanner = hTable.getScanner(scan); 
    Iterator<Result> resultsIter = scanner.iterator(); 
    while (resultsIter.hasNext()) 
    { 

     Result result = resultsIter.next(); 

     List<KeyValue> values = result.list(); 
     for (KeyValue value : values) 
     { 
      System.out.println(value.getKey()); 
      System.out.println(new String(value.getQualifier())); 
      System.out.println(value.getValue()); 
     } 
    } 
+0

为此,我需要知道我的行键有一些以A开头的列。这里的问题是给定行键的列名是未知的。 –

+0

你也可以在运行时解决它。 – kkmishra

+0

按照上面的代码,它只是执行扫描所有列以A开头(我可以做一个到这里而不是扫描,我有行键)。除非我执行获取和比较,否则没有关于运行时间分辨率的规定。这不是接近我的要求的地方。 @kkmishra,我想我还没有明白你的意思。你能详细说明一下吗? –