在使用Java时,我有一行代码如下所示:
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中,我如何知道存储在一个族:限定符中的给定值的数据类型?
谢谢!
发布于 2013-04-21 21:54:22
与传统的关系数据库管理系统不同,HBase不支持“类型化列”,在这种情况下,数据存储将跟踪存储的数据类型。HBase本机不跟踪存储在列中的数据类型,因此无法本机判断数据类型。使用HBase的开发人员自己负责跟踪列数据类型。
对于许多应用程序,应用程序可以对每个列的类型进行“硬编码”。这样,HBase表比RDBMS表更适合应用程序。开发人员还可以为行创建一个列系列或列,该列专用于数据类型架构(例如,作为字符串序列化的Avro模式)。
HBase文档的“体系结构”页面解释了HBase与传统关系数据库管理系统之间的区别:
https://hbase.apache.org/book/architecture.html#arch.overview.when
发布于 2012-01-12 11:36:45
对于第一个问题,您可以尝试转换为int,如果您有异常,您知道它是一个字符串。但这不是个好办法。
发布于 2016-12-26 18:30:42
在存储值时使用OrderedBytes。它确保每种类型的数据都以某些数值作为前缀。参考,https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html
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中的一个示例
https://stackoverflow.com/questions/8834372
复制相似问题