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 についても同じ問題がありました。これが私の区切りでした。

シェルがバイナリ値を受け入れるようにするには、一重引用符 (') ではなく二重引用符 (") で指定する必要があります。

put '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 に 2 つのコロンが含まれている場合はどうなるでしょうか。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 に答える