2012-04-04 5 views
5

In unserer unendlichen Weisheit haben wir beschlossen, unsere Reihen mit einer Lasche in der Mitte eingegeben werden würden:Wie gebe ich einen Zeilenschlüssel in der HBase-Shell an, der eine Registerkarte enthält?

item_id <tab> location 

Zum Beispiel:

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

Mit Hbase Shell, können wir keinen Befehl get, weil das ausführen Tab-Zeichen wird nicht richtig in der Eingabezeile geschrieben. Wir versuchten

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

ohne Erfolg. Was sollen wir machen?

Antwort

10

Ich hatte das gleiche Problem für binäre Werte: \ x00. Das war mein Trennzeichen.

Für die Shell Ihre binären Werte zu übernehmen, müssen Sie sie in doppelte Anführungszeichen, um (") Familie statt Apostroph (') MyTable 'MyKey "

gelegt.'"': Qualifier‘, "\ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x06Hello von Shell"

prüfen, wie sie Ihre Registerkarte codiert wird, meine beste Wette wäre, dass es UTF8 so codiert wird, aus der ASCII-Tabelle, das wäre "000001 \ x09http: //www.url.com/page".

Nebenbei bemerkt, Sie Shou ld verwenden Nullzeichen für Ihr Trennzeichen, es wird Ihnen beim Scannen helfen.

+0

Dies scheint zu stehen, zumal es die allgemeine Frage zu entkommen Zeichen in der HBase Shell-Adressen. Was wir stattdessen gemacht haben, war, unsere Schlüssel zu bearbeiten und diese zu verwenden, was nicht nur sehr langweilige Schlüssel (alle Hex-Zeichen) liefert, sondern sie auch über unseren Tisch verteilt, um alle Regionen gut zu treffen. – whiterook6

0

Ich hoffe, Sie können das Tab-Zeichen ändern. :) Ja, das ist eine schlechte Idee, da Map Reduce-Jobs die Registerkarte als Trennzeichen verwenden und es generell eine schlechte Idee ist, eine Registerkarte oder ein Leerzeichen als Trennzeichen zu verwenden.

Sie könnten einen doppelten Doppelpunkt (: :) als Trennzeichen verwenden. Aber was ist, wenn die URL einen doppelten Doppelpunkt in der URL hat? Nun, urlencode die URL, wenn Sie es auf HBase speichern - auf diese Weise haben Sie ein Standard-Trennzeichen, und der URL-Teil des Schlüssels wird nicht mit dem Trennzeichen kollidieren.

In Python:

import urllib 

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

rowkey = item_id + DELIMITER + urlkey 
+0

Mein Team verwendet die Registerkarte "Tabulator" als Trennzeichen in HBase. Daten, von denen wir wissen, dass sie keine Registerkarten enthalten können, werden verwendet. Keine Probleme mit Map Reduce oder irgendetwas anderem. – Tony

Verwandte Themen