HBase 列数据类型

sac*_*ing 3 java hadoop hbase

我正在开发 hbase java 客户端,我能够从 hbase 数据存储中获取元数据,例如所有表名、列族和列,但我无法获取在 google 上搜索的 hbase 列的数据类型并发现无法获取数据类型

在hbase java客户端的帮助下HTableDescriptorHColumnDescriptor

另一个问题是我以这种方式获取元数据,我认为这不是这样的方式,如果有人可以优化此代码将真正帮助我

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;
    }
Run Code Online (Sandbox Code Playgroud)

如果可以的话请帮助我谢谢

Cla*_*diu 5

在与HBase您只能使用列族,并且它们不具有类型。至少在我使用的 0.98 版本之前是这样。

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

另外,建议的最大列族数量为 3。

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

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

HBase这本书是一本很好的参考书,你也可以先看一下数据模型,对结构有一个清晰的了解。