2012-04-04 9 views
5

W naszej nieskończonej mądrości, zdecydowaliśmy nasze wiersze byłyby nadwozia z kartą w środku:Jak określić klucz wiersza w powłoce hbase z zakładką?

item_id <tab> location 

Na przykład:

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

Korzystanie HBase Shell, nie możemy wykonać polecenie get ponieważ znak tabulacji nie jest poprawnie zapisywany w linii wejściowej. Próbowaliśmy bezskutecznie:

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

. Co powinniśmy zrobić?

Odpowiedz

10

Miałem ten sam problem dla wartości binarnych: \ x00. To był mój separator.

Na powłoce, aby zaakceptować wartości binarne, trzeba zapewnić im w podwójny cudzysłów (") Rodzina zamiast pojedynczy cudzysłów («) MojaTabela «MyKey«,

put.»»»: kwalifikator”, "\ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x06Hello z muszli"

Sprawdź jak Twoja zakładka jest kodowany, mój najlepiej byłoby, że jest UTF8 zakodowane więc od Tabela ASCII to "000001 \ x09http: //www.url.com/page".

Na marginesie, ty ld używaj znaku pustego dla twojego separatora, to pomoże ci w skanowaniu.

+0

To wydaje się działać, zwłaszcza, że ​​rozwiązuje ona ogólną kwestię ucieczki znaków w powłoce HBase. Zamiast tego wykonaliśmy md5ing naszych kluczy i wykorzystaliśmy to, co nie tylko zapewnia bardzo nudne klucze (wszystkie znaki szesnastkowe), ale także rozprzestrzenia je po naszym stole, aby ładnie trafić wszystkie regiony. – whiterook6

0

Mam nadzieję, że możesz zmienić znak tabulacji. :) Tak, to zły pomysł, ponieważ Map Reduce jobs używa karty jako ogranicznika, a jej złym pomysłem jest używanie tabulatora lub spacji jako ogranicznika.

Możesz użyć podwójnego dwukropka (: :) jako ogranicznika. Ale poczekaj, a jeśli adres URL ma dwukropek w adresie URL? Cóż, zakoduj URL URL podczas przechowywania go w HBase - w ten sposób masz standardowy ogranicznik, a część adresu URL klucza nie będzie kolidować z ogranicznikiem.

W Pythonie:

import urllib 

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

rowkey = item_id + DELIMITER + urlkey 
+0

Mój zespół używa tabulatora jako ogranicznika przez cały czas w HBase, ponieważ dane, które znamy, nie mogą zawierać zakładek. Żadnych problemów z mapą Zmniejszenie lub cokolwiek innego. – Tony

Powiązane problemy