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

les*_*lie 7 java hbase

使用HBase Java API时,我有一行代码如下:

byte[] value = scanner.next().getValue(Bytes.toBytes(family), Bytes.toBytes(qualifier));
Run Code Online (Sandbox Code Playgroud)

假设我不知道它是否为此值的Int或String类型,我应该在它之间使用Byte.toInt(value)Byte.toString(value)正确打印值

这不是一个真正的HBase/Hadoop问题,而是一个Java问题,但我用Google搜索并找不到获取它的方法.有可能知道吗?

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

谢谢!

小智 6

与传统的RDBMS不同,HBase不支持"类型列",其中数据存储跟踪存储的数据类型.HBase本身并没有跟踪 - 因此无法本地告知 - 存储在列中的数据类型.使用HBase的开发人员负责自己跟踪列数据类型.

对于许多应用程序,应用程序可以"硬编码"每列的类型.通过这种方式,HBase表往往比RDBMS表更具应用程序特性.开发人员还可以创建专用于该行的数据类型架构的列族或列(例如,序列化为字符串的Avro架构).

HBase文档的"架构"页面在这里解释了HBase与传统RDBMS之间的差异:

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


小智 3

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

  • +1:缺点是一些 32 位“int”值也是有效的字符串。 (6认同)