Java HBase列数据类型

Java HBase列数据类型,java,hadoop,hbase,Java,Hadoop,Hbase,我正在使用hbase java客户端,我能够从hbase数据存储中获取元数据,就像所有表名、列族和列一样,但我无法获取我在google上搜索的hbase列的数据类型,我知道不可能获取数据类型 在hbase java客户端的帮助下,HTableDescriptor,HColumnDescriptor 另一个问题是,我用这种方式获取元数据。我认为,如果有人能够优化这段代码,那么这种方式就不会真正帮助我 public List<ColumnFamily> getMetaDataOfTabl

我正在使用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;
    }
public List getMetaDataOfTable(字符串tableName){
HTable table=null;
试一试{
HTableDescriptor tableDescriptor=admin.getTableDescriptor(字节)
.toBytes(表名));
HColumnDescriptor[]columnDescriptor=tableDescriptor
.getColumnFamilies();
用于(HColumnDescriptor临时:columnDescriptor){
ColumnFamily ColumnFamily=新ColumnFamily();
columnFamily.setName(temp.getNameAsString());
columnFamilies.add(columnFamily);
}
table=新的HTable(conf,tableName);
扫描=新扫描();
对于(ColumnFamily ColumnFamily:columnFamilies){
scan.addFamily(Bytes.toBytes(columnFamily.getName());
ResultScanner scanner=table.getScanner(扫描);
for(Result=scanner.next();Result!=null;Result=scanner
.next()){
Map Map=result.getFamilyMap(字节)
.toBytes(columnFamily.getName());
setColumnsList(getColumns(map));
}
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
table.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
返回家庭;
}
如果可以,请帮助我
感谢使用
HBase
时,只能使用列族,它们不包含类型。至少在我使用的版本0.98之前

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

此外,柱族的最大建议数量为3

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

基本上,
HBase
中的一行是一组单元格,每个单元格由列名标识。 数据是二进制存储的,您需要对数据进行编解码器<代码>字节。toXXX方法可用于编码/解码数据


是一个很好的参考,您也可以首先查看,并清楚地了解结构。

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