在我們無窮的智慧,我們決定我們的行會在中間的選項卡中鍵入:如何在包含標籤的hbase shell中指定行密鑰?
item_id <tab> location
例如:
000001 http://www.url.com/page
使用HBase的殼牌,我們不能執行get命令,因爲製表符在輸入行中沒有正確寫入。我們試過
get 'tableName', '000001\thttp://www.url.com/page'
沒有成功。我們應該做什麼?
在我們無窮的智慧,我們決定我們的行會在中間的選項卡中鍵入:如何在包含標籤的hbase shell中指定行密鑰?
item_id <tab> location
例如:
000001 http://www.url.com/page
使用HBase的殼牌,我們不能執行get命令,因爲製表符在輸入行中沒有正確寫入。我們試過
get 'tableName', '000001\thttp://www.url.com/page'
沒有成功。我們應該做什麼?
我對二進制值有同樣的問題:\ x00。這是我的分隔符。
從shell接受你的二進制值,你需要爲他們提供在雙引號(「)的家庭,而不是單引號( ')的MyTable'的myKey 」
放。「':資格賽」, 「\ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ x06Hello從殼」
檢查你的標籤是如何被編碼的,我最好的選擇是,它是UTF8編碼,從ASCII表,這將是「000001 \ x09http://www.url.com/page」。
在旁註中,你應該ld使用空字符作爲分隔符,它會幫助你掃描。
希望你可以改變製表符。 :)是的,這是一個壞主意,因爲Map Reduce作業使用該選項卡作爲分隔符,並且使用選項卡或空格作爲分隔符通常是一個糟糕的主意。
您可以使用雙冒號(:)作爲分隔符。但是請等一下,如果URL在URL中有雙冒號,該怎麼辦?那麼,在將它存儲到HBase時urlen將URL編碼 - 這樣,您就有一個標準分隔符,並且該鍵的URL部分不會與分隔符發生衝突。
在Python:
import urllib
DELIMITER = "::"
urlkey = urllib.quote_plus(location)
rowkey = item_id + DELIMITER + urlkey
我的團隊始終在HBase中使用製表符作爲分隔符,因爲我們知道的數據不能包含製表符。 Map Reduce或其他方面沒有問題。 – Tony 2017-07-24 21:37:09
這似乎是工作,特別是因爲它解決了HBase的外殼逃逸字符的一般性問題。我們最後做的事情就是使用我們的密鑰並使用它,它不僅提供了非常無聊的密鑰(所有十六進制字符),還將它們散佈在我們的桌子上,很好地擊中了所有的區域。 – whiterook6 2012-08-01 17:27:40