HBase 列数据类型

Posted

技术标签:

【中文标题】HBase 列数据类型【英文标题】:HBase Column data types 【发布时间】:2014-09-30 12:58:57 【问题描述】:

我正在使用 hbase java 客户端,我能够从 hbase 数据存储中获取元数据,就像所有表名、列族和列一样,但我无法获取 hbase 列的数据类型 i在google上搜索,才知道无法获取数据类型

借助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;
    

如果可以,请帮助我 谢谢

【问题讨论】:

【参考方案1】:

使用HBase 时,您只能使用列族,它们不包含类型。至少在我使用的 0.98 版本之前不会。

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

此外,推荐的最大列族数为 3。

现在,回到您的问题,目前没有机制来定义 HBase 内的列,只有族,而在族内,您可以动态设置列的值。

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

HBase book 是一个很好的参考,你也可以先看看datamodel 并清楚地了解结构。

【讨论】:

【参考方案2】:

如果您想使用 HBase 指定列类型,可以使用 Apache Phoenix(一个 SQL 层/驱动器到 HBase):

https://phoenix.apache.org/language/datatypes.html

【讨论】:

以上是关于HBase 列数据类型的主要内容,如果未能解决你的问题,请参考以下文章

Hbase理论-数据模型

HBASE 1.0

HBase基础概念

HBase 数据模型及读写操作

Hbase学习笔记

为啥说hbase是一个面向列的数据库?