1

我正在尝试通过执行以下操作添加德语字符串来更新表: put'table:data_validation_test','58e1f4200f23e474ca2d7f3a','urlbody:data','Auslöser' 我在扫描此表时得到的是:

scan 'table:data_validation_test'
ROW                                  COLUMN+CELL                                                                                               
 58e1f4200f23e474ca2d7f3a            column=urlbody:data, timestamp=1491215905923, value=Ausl\xC3\xB6ser                                       
 58e1f4200f23e474ca2d7f3a            column=urlbody:id, timestamp=1491215697534, value=58e1f4200f23e474ca2d7f3a

我找不到在 hbase 中设置编码字符串的方法。如何将字符串原样放入 Hbase?

4

1 回答 1

1

这只是scan命令的输出问题(同样发生在get)。实际上,您的字符串已正确存储。

这是因为 ö ( \xC3\xB6) 被编码为 2 个字节,并且\xC3不能\xB6显示为可读字符。请记住,在 HBase 中,主要类型是Array[Byte].

如果您尝试使用 JRuby(在 HBase shell 中)获取字符串值:

include Java
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.HTable
import org.apache.hadoop.hbase.client.Get
import org.apache.hadoop.hbase.util.Bytes

config = HBaseConfiguration.create
htable = HTable.new(conf, 'table:data_validation_test')
result = htable.get(Get.new('58e1f4200f23e474ca2d7f3a'.to_java_bytes))

puts Bytes.toString(result.getValue('urlbody'.to_java_bytes, 'data'.to_java_bytes))

然后,您的值应该正确显示。

于 2017-04-03T14:28:53.030 回答