将德语文本放入 hbase table
putting german text in hbase table
我正在尝试通过执行以下操作添加德语字符串来更新 table:
put'table:data_validation_test','58e1f4200f23e474ca2d7f3a','urlbody:data','Auslöser'
我扫描这个 table 得到的是:
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 中?
这只是 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))
那么,你的值应该能正常显示了。
我正在尝试通过执行以下操作添加德语字符串来更新 table:
put'table:data_validation_test','58e1f4200f23e474ca2d7f3a','urlbody:data','Auslöser'
我扫描这个 table 得到的是:
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 中?
这只是 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))
那么,你的值应该能正常显示了。