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 列数据类型的主要内容,如果未能解决你的问题,请参考以下文章