hbase列数据类型

ohtdti5x  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(437)

我在hbase java客户机上工作,我能够从hbase数据存储中获取元数据,就像所有的表名、列族和列一样,但是我无法获取在google上搜索的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;
    }

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

zysjyyx4

zysjyyx41#

在使用时 HBase 只能处理柱族,但它们不包含类型。至少在我使用的版本0.98之前。
无论如何,应该使用列族对列进行分组,以便每组列用于其他用途,但使用不受限制。
此外,建议的最大柱族数为3。
现在,回到你的问题上来,目前还没有机制来定义列 HBase 、仅族和族内部可以动态设置列的值。
基本上是一排 HBase 是一组单元格,每个单元格由列名标识。数据是二进制存储的,您需要有数据的编解码器。 Bytes.toXXX 方法可用于编码/解码数据。
hbase手册是一本很好的参考书,而且您可以首先查看数据模型,并清楚地了解其结构。

4uqofj5v

4uqofj5v2#

如果要使用hbase指定列类型,则可以使用apache phoenix(hbase的sql层/驱动器):
https://phoenix.apache.org/language/datatypes.html

相关问题