2014-09-30 1315 views
1

我正在使用hbase java客户端,并且能够从所有表名,列族和列中获取hbase数据存储的元数据,但我无法获取数据类型HBase的专栏中,我搜索谷歌和才知道,这是不可能得到的数据HBase列数据类型

具有HBase的Java客户端HTableDescriptor的帮助的类型,HColumnDescriptor

另一个问题是我收到的元数据这我认为这不是方式,如果任何人可以优化此代码将真的帮助我

public List<ColumnFamily> getMetaDataOfTable(String tableName) { 
     HTable table = null; 
     try { 
      HTableDescriptor tableDescriptor = admin.getTableDescriptor(Bytes 
        .toBytes(tableName)); 
      HColumnDescriptor[] columnDescriptor = tableDescriptor 
        .getColumnFamilies(); 
      for (HColumnDescriptor temp : columnDescriptor) { 
       ColumnFamily columnFamily = new ColumnFamily(); 
       columnFamily.setName(temp.getNameAsString()); 
       columnFamilies.add(columnFamily); 
      } 

      table = new HTable(conf, tableName); 
      Scan scan = new Scan(); 

      for (ColumnFamily columnFamily : columnFamilies) { 
       scan.addFamily(Bytes.toBytes(columnFamily.getName())); 
       ResultScanner scanner = table.getScanner(scan); 
       for (Result result = scanner.next(); result != null; result = scanner 
         .next()) { 

        Map<byte[], byte[]> map = result.getFamilyMap(Bytes 
          .toBytes(columnFamily.getName())); 
        columnFamily.setColumnsList(getColumns(map)); 
       } 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       table.close(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     return columnFamilies; 
    } 

请帮助我,如果你能 感谢

回答

2

虽然与HBase工作,你只能与列科工作,他们不持有一种类型。至少在我使用的版本0.98之前。

无论如何,应该使用列族来对列进行分组,以便每组列都用于其他内容,但是使用不受限制。

也列族的最大推荐数为3

现在,回到你的问题,目前还没有机制来定义里面HBase,只有家人列了,里面的家庭,你可以设定值列动态。

基本上HBase中的一行是一组单元格,每个单元格由列名标识。 数据以二进制格式存储,您需要具有数据的编解码器。可以使用方法Bytes.toXXX来编码/解码数据。

HBase book是一个很好的参考,你也可以先看看datamodel并有一个清晰的结构视图。