在我们无限的智慧中,我们决定我们的行将在中间用一个制表符键控:
item_id <tab> location
例如:
000001 http://www.url.com/page
使用 Hbase Shell,我们无法执行 get 命令,因为制表符没有正确写入输入行。我们尝试了
get 'tableName', '000001\thttp://www.url.com/page'
没有成功。我们应该做什么?
我对二进制值有同样的问题:\x00。这是我的分隔符。
为了让 shell 接受您的二进制值,您需要用双引号 (") 而不是单引号 (') 来提供它们。
把 'MyTable', "MyKey", 'Family:Qualifier', "\x00\x00\x00\x00\x00\x00\x00\x06Hello from shell"
检查你的标签是如何编码的,我最好的选择是它是 UTF8 编码的,所以从 ASCII 表中,这将是“000001\x09http://www.url.com/page”。
在旁注中,您应该使用空字符作为分隔符,它将帮助您进行扫描。
希望您可以更改制表符。:) 是的,这是一个坏主意,因为 Map Reduce 作业使用制表符作为分隔符,使用制表符或空格作为分隔符通常是个坏主意。
您可以使用双冒号 (::) 作为分隔符。但是等等,如果 URL 中有一个双冒号呢?好吧,在将 URL 存储到 HBase 时对 URL 进行 urlencode - 这样,您就有了标准分隔符,并且密钥的 URL 部分不会与分隔符冲突。
在 Python 中:
import urllib
DELIMITER = "::"
urlkey = urllib.quote_plus(location)
rowkey = item_id + DELIMITER + urlkey