2012-12-02 13 views
8
  1. HBaseクライアントAPIでは、HBaseが新しく、更新操作はサポートされていません。あれは正しいですか?
  2. ある場合は、特定の行キーの値を更新するための推奨されるベストプラクティスは何ですか?

答えて

11

任意のセルの値を作成または更新するPUTを使用できます。 あなたはではありませんは新しいバージョンに古いセルを持たせたくない場合を除いて削除を使用する必要があります。 F1:C1新しい価値とあなたが取得したい:

は、我々はあなたがR1を置くことができる

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

を持っていると言う、実際に各セルはのrowKeyとして保存されている

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

注意、列の家族、セル、タイムスタンプ、バージョン、および値。したがって、バージョン管理の設定(列ファミリごと)に応じて、ポイント・イン・タイム問合せを実行するなど、古い値にアクセスして、削除された値を表示することもできます。

+0

お返事ありがとうございます。あなたの答えははっきりしており、私はHBaseについて理解しやすくなりました(私はほとんど調査し始めていません)。 – tonio

+3

こんにちは@Arnon、私の質問は原子的な方法で更新する方法の詳細です。私は原子操作シーケンスで読み取り(GET)と更新を行いたいです。更新方法は、読み込んだ値に依存するので、読み込みと更新の間の更新は避けたいと考えています。あなたのサンプルでは、​​どのように目標を達成するのですか? –

+4

HTable APIでcheckAndPutまたはcheckAndDeleteを使用できます。http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#checkAndPut(byte []、byte []、byte []) 、byte []、org.apache.hadoop.hbase.client.Put) –

4

プット操作を実行すると思います。 HBaseのPut API client docsと、このブログの投稿Java Example Code using HBase Data Model Operationsとその操作の説明を参照できます。

行を更新するには、「Delete」と「Put」のシーケンスを1つの突然変異体に発行する必要があります。そのため、外部からの更新とみなされます。

このような呼び出しの構築方法については、Class RowMutations documentationを参照してください。

+0

こんにちは、私が間違っている場合は私を修正してください。 Put APIサポートの更新操作やサンプルコードが表示されません。更新のためには、すでにHBaseテーブルに行があります。たとえば、行キーはr1で、c1という1つの列があり、セルr1/c1に値があります。更新のために、セルr1/c1の値を他の値に変更したいとします。私が間違っていれば私を修正してください。 –

+0

右の値を変更する場合は、アトミックコールでdeleteとputを組み合わせる必要があります。更新された回答をご覧ください。 – tonio

+0

ありがとう、私の質問に答えています。 –

関連する問題