私たちの無限の知恵で、行の中央にタブを配置することにしました。
item_id <tab> location
例えば:
000001 http://www.url.com/page
Hbase Shell を使用すると、タブ文字が入力行に正しく書き込まれないため、get コマンドを実行できません。私たちは試しました
get 'tableName', '000001\thttp://www.url.com/page'
成功せずに。私たちは何をすべきか?
バイナリ値 \x00 についても同じ問題がありました。これが私の区切りでした。
シェルがバイナリ値を受け入れるようにするには、一重引用符 (') ではなく二重引用符 (") で指定する必要があります。
put '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 に 2 つのコロンが含まれている場合はどうなるでしょうか。URL を HBase に格納するときに URL を urlencode します。これにより、標準の区切り文字が得られ、キーの URL 部分が区切り文字と競合しなくなります。
Python の場合:
import urllib
DELIMITER = "::"
urlkey = urllib.quote_plus(location)
rowkey = item_id + DELIMITER + urlkey