6

在我们无限的智慧中,我们决定我们的行将在中间用一个制表符键控:

item_id <tab> location

例如:

000001  http://www.url.com/page

使用 Hbase Shell,我们无法执行 get 命令,因为制表符没有正确写入输入行。我们尝试了

get 'tableName', '000001\thttp://www.url.com/page'

没有成功。我们应该做什么?

4

2 回答 2

13

我对二进制值有同样的问题:\x00。这是我的分隔符。

为了让 shell 接受您的二进制值,您需要用双引号 (") 而不是单引号 (') 来提供它们。

把 'MyTable', "MyKey", 'Family:Qualifier', "\x00\x00\x00\x00\x00\x00\x00\x06Hello from shell"

检查你的标签是如何编码的,我最好的选择是它是 UTF8 编码的,所以从 ASCII 表中,这将是“000001\x09http://www.url.com/page”。

在旁注中,您应该使用空字符作为分隔符,它将帮助您进行扫描。

于 2012-07-26T00:17:29.807 回答
0

希望您可以更改制表符。:) 是的,这是一个坏主意,因为 Map Reduce 作业使用制表符作为分隔符,使用制表符或空格作为分隔符通常是个坏主意。

您可以使用双冒号 (::) 作为分隔符。但是等等,如果 URL 中有一个双冒号呢?好吧,在将 URL 存储到 HBase 时对 URL 进行 urlencode - 这样,您就有了标准分隔符,并且密钥的 URL 部分不会与分隔符冲突。

在 Python 中:

import urllib

DELIMITER = "::"
urlkey = urllib.quote_plus(location)

rowkey = item_id + DELIMITER + urlkey
于 2012-07-27T15:47:08.090 回答