2014-09-30 40 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並有一個清晰的結構視圖。