2012-12-02 5 views
8
  1. Ich bin neu in HBase, finde ich in HBase Client API, Update-Vorgang wird nicht unterstützt? Ist das korrekt?
  2. Wenn ja, wie empfehlen wir die Aktualisierung der Werte für einen bestimmten Zeilenschlüssel?

Antwort

11

Sie können PUT verwenden, das den Wert einer Zelle erstellt oder aktualisiert. Sie nicht müssen löschen verwenden, es sei denn, Sie möchten die neue Version nicht einige der alten Zellen haben.

sagen wir

r1:f1:c1:value1 
r1:f1:c2:value2 

haben Sie r1 setzen können: f1: c1 neuen Wert und Sie erhalten würde:

r1:f1:c1:new value 
r1:f1:c2:value2 

Beachten Sie, dass tatsächlich jede Zelle als RowKey gespeichert ist, Spalte Familie, Zelle, Zeitstempel, Version und Wert. Je nachdem, wie Sie die Versionierung (pro Spaltenfamilie) festlegen, können Sie auch auf die alten Werte zugreifen, einschließlich einer Punktabfrage, um gelöschte Werte zu sehen.

+0

Danke, Ihre Antwort ist klar und hat mir geholfen, HBase besser zu verstehen (was ich gerade erst in Angriff nehme). – tonio

+3

Hi @Arnon, meine Frage ist mehr darüber, wie auf atomare Weise zu aktualisieren. Ich möchte lesen (GET) und in einer atomaren Operationsfolge aktualisieren. Angenommen, in einem Fall, wie zu aktualisieren ist abhängig von dem Wert gelesen, so möchte ich jedes Update zwischen lesen und aktualisieren vermeiden. In Ihrer Probe, wie Sie das Ziel erreichen? –

+4

Sie können checkAndPut oder checkAndDelete in der HTable-API verwenden http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#checkAndPut (byte [], byte [], byte [] , byte [], org.apache.hadoop.hbase.client.Put) –

4

Ich denke, was Sie tun möchten, ist eine Put-Operation durchzuführen. Sie können die HBase Put API client docs sowie diesen Blog-Eintrag mit dem Titel: Java Example Code using HBase Data Model Operations für einige Beispiele und Beschreibungen der Operationen betrachten.

Um eine Zeile zu aktualisieren, müssen Sie eine Sequenz von "Delete" und "Put" in einer einzigen Mutation ausgeben, so dass sie extern als Aktualisierung angesehen werden.

Sehen Sie die Class RowMutations documentation auf, wie man solch einen Anruf errichtet.

+0

Hallo Tonio, korrigieren Sie mich, wenn ich falsch liege. Ich sehe keine Aktualisierung der Put-API-Unterstützung oder im Beispielcode. Für update ich meine, es gibt bereits eine Zeile in einer HBase-Tabelle, zum Beispiel, Zeilenschlüssel ist r1, und es hat eine Spalte namens c1 und es gibt einen Wert in der Zelle r1/c1. Für Update meine ich möchte ich möchte den Wert für die Zelle r1/c1 auf einige andere Werte ändern. Bitte zögern Sie nicht, mich zu korrigieren, wenn ich falsch liege. –

+0

Richtig, wenn Sie die Werte in einer Zeile ändern möchten, müssen Sie löschen und einen atomaren Aufruf einfügen. Siehe aktualisierte Antwort. – tonio

+0

Danke, meine Frage wird beantwortet. –