hbase shell rowkey中的非十六进制字符是什么?

lztngnrs  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(763)

我正在将密钥保存为字节数组。在hbase shell中,当我查看键时,我看到非十六进制值…我没有启用任何编码,也没有启用任何压缩。
这是一个例子…什么是vnq?什么是bbw?我猜有某种编码在进行?

\xFB\xC6\xE8\x03\xF0VNQ\x8By\xF6\x89D\xC1\xBBW\x00\x00\x00\x00\x00\x00\x01\xF3\x00\x00\x00\x00\x00\x07\xA1\x1F
mec1mxoz

mec1mxoz1#

hbase shell使用称为字节数组的“二进制字符串”(转义十六进制)表示形式来打印键/值(请参阅bytes.tostringbinary方法)。此方法基本上对每个字节执行以下两个操作之一:
如果字节值在范围内,则将其转换为可打印(ascii)表示形式。
如果字节值不在ascii范围内,则将其转换为\xhh(其中“h”表示十六进制数字)。
其思想是使用可打印的表示。如果您的键/值都是可打印的字符,那么shell将不会打印出这些奇怪的\xhh序列。
如果您更喜欢十六进制表示法,请在hbase shell中尝试以下操作:

> import org.apache.hadoop.hbase.util.Bytes
> Bytes.toHex(Bytes.toBytesBinary("\xFB\xC6\xE8\x03\xF0VNQ"))
> fbc6e803f0564e51

您可以修改hbase shell ruby wrappers以使用tohex()方法而不是tostringbinary()来打印数据(或者更好;如果您愿意的话,您可以向hbase提供一个补丁来包含这两个选项的标志;请参阅hbase开发人员指南)。

相关问题