理解编码的hbase值

时间:2012-08-27 23:17:12

标签: binary hex hbase

我目前正在调查数据被破坏的错误,我们不确定发生了哪个组件。我试图从Hbase中读取值,但因为编码而无法理解它们。我被告知它是'二进制编码的十六进制'(无论那意味着什么)。 有谁知道如何解码这些值?任何解决方案都将受到赞赏;是否可以下载一些实用程序或一步一步的手动过程。以下是我的hbase扫描中的一些示例行。

column=m:----_daily_count, timestamp=1345766400000, value=\x00\x00\x00\x01 column=a:utc_offset, timestamp=1346025600000, value=\xFF\xFF\x9D\x90
column=m:----_daily_count, timestamp=1344816000000, value=\x00\x00\x00\x03

----正在替换可能揭示未发布产品信息的数据类型名称。

1 个答案:

答案 0 :(得分:2)

不确定这是否有帮助,但HBase不理解类型,并且实质上将所有内容存储为字节序列。从十六进制编码到实际字节值非常容易:

\x00\x00\x00\x01

是字节序列:

0 0 0 1

如果我不得不猜测,这些值应该是长的,所以上面只是1L。

你可以使用java API(特别是org.apache.hadoop.hbase.util.Bytes类)将字节序列转换为java中的实际类型,但要了解它,你需要知道它们被序列化的类型。此外,这假设写入数据的任何内容也是用java编写的和/或具有相同的字节顺序。

如果你知道ruby,你也可以使用理解那些字节序列的字符串类的unpack()方法,但你仍然需要知道类型/ endianess才能这样做,如果它不是原语,它可能不起作用。