首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java(HBase) API:如何知道以字节为单位存储的值的数据类型

Java(HBase) API:如何知道以字节为单位存储的值的数据类型
EN

Stack Overflow用户
提问于 2012-01-12 11:32:35
回答 3查看 4.9K关注 0票数 7

在使用Java时,我有一行代码如下所示:

代码语言:javascript
复制
byte[] value = scanner.next().getValue(Bytes.toBytes(family), Bytes.toBytes(qualifier));

假设我不知道这个值是Int类型还是字符串类型,那么应该在Byte.toInt(value) Byte.toString(value) Byte.toString(value)之间使用正确地打印值吗?

这并不是一个真正的HBase/Hadoop问题,而是一个Java问题,但我在googled上搜索,但找不到获得它的方法。有可能知道吗?

另一方面,从HBase Java中,我如何知道存储在一个族:限定符中的给定值的数据类型?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2013-04-21 21:54:22

与传统的关系数据库管理系统不同,HBase不支持“类型化列”,在这种情况下,数据存储将跟踪存储的数据类型。HBase本机不跟踪存储在列中的数据类型,因此无法本机判断数据类型。使用HBase的开发人员自己负责跟踪列数据类型。

对于许多应用程序,应用程序可以对每个列的类型进行“硬编码”。这样,HBase表比RDBMS表更适合应用程序。开发人员还可以为行创建一个列系列或列,该列专用于数据类型架构(例如,作为字符串序列化的Avro模式)。

HBase文档的“体系结构”页面解释了HBase与传统关系数据库管理系统之间的区别:

https://hbase.apache.org/book/architecture.html#arch.overview.when

票数 6
EN

Stack Overflow用户

发布于 2012-01-12 11:36:45

对于第一个问题,您可以尝试转换为int,如果您有异常,您知道它是一个字符串。但这不是个好办法。

票数 3
EN

Stack Overflow用户

发布于 2016-12-26 18:30:42

在存储值时使用OrderedBytes。它确保每种类型的数据都以某些数值作为前缀。参考,https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html

代码语言:javascript
复制
byte[] value = scanner.next().getValue(Bytes.toBytes(family), Bytes.toBytes(qualifier));
int typeByte = value[0]
if(typeByte == 52)
    // do operation for String
else if(typeByte == 43)
    // do operation for Integer
else if (typeByte == 45)
    // do operation for Double

注意:在按数据类型将数据写入hbase时,将附加值43、45和52。

请参阅http://davidgreenshtein.blogspot.co.uk/2015/03/geo-spatial-search-in-hbase.html中的一个示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8834372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档