2012-04-04 78 views
5

在我們無窮的智慧,我們決定我們的行會在中間的選項卡中鍵入:如何在包含標籤的hbase shell中指定行密鑰?

item_id <tab> location 

例如:

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

使用HBase的殼牌,我們不能執行get命令,因爲製表符在輸入行中沒有正確寫入。我們試過

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

沒有成功。我們應該做什麼?

回答

10

我對二進制值有同樣的問題:\ x00。這是我的分隔符。

從shell接受你的二進制值,你需要爲他們提供在雙引號(「)的家庭,而不是單引號( ')的MyTable'的myKey 」

放。「':資格賽」, 「\ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ x06Hello從殼」

檢查你的標籤是如何被編碼的,我最好的選擇是,它是UTF8編碼,從ASCII表,這將是「000001 \ x09http://www.url.com/page」。

在旁註中,你應該ld使用空字符作爲分隔符,它會幫助你掃描。

+0

這似乎是工作,特別是因爲它解決了HBase的外殼逃逸字符的一般性問題。我們最後做的事情就是使用我們的密鑰並使用它,它不僅提供了非常無聊的密鑰(所有十六進制字符),還將它們散佈在我們的桌子上,很好地擊中了所有的區域。 – whiterook6 2012-08-01 17:27:40

0

希望你可以改變製表符。 :)是的,這是一個壞主意,因爲Map Reduce作業使用該選項卡作爲分隔符,並且使用選項卡或空格作爲分隔符通常是一個糟糕的主意。

您可以使用雙冒號(:)作爲分隔符。但是請等一下,如果URL在URL中有雙冒號,該怎麼辦?那麼,在將它存儲到HBase時urlen將URL編碼 - 這樣,您就有一個標準分隔符,並且該鍵的URL部分不會與分隔符發生衝突。

在Python:

import urllib 

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

rowkey = item_id + DELIMITER + urlkey 
+0

我的團隊始終在HBase中使用製表符作爲分隔符,因爲我們知道的數據不能包含製表符。 Map Reduce或其他方面沒有問題。 – Tony 2017-07-24 21:37:09