(ビット単位の整数フラグや合計列のように)上書き以外のインクリメンタルに更新される列があるとします。hbaseでセルマージを実行できますか?
既存のセル:[キー: 'K1'、F1:合計:100]
Upcomming新しいセル:[キー: 'K1'、F1:合計:200(たとえば、1つだけのバージョンを想定) ]
それから私は、セルのデータをこのように更新したい:合計= 100 + 200 = 300 は、最終的な記録収量:
を[キー: 'K1'、F1:合計:300]
ここに私はしたいMERGE新しいセルを同じキーを持つ古いものに入れます。 これをどうすれば実現できますか?直接を入力してを入力すると、古いセルが単純に上書きされます。 (ここでも1つのバージョンのみが維持されます)。
私はいくつかのアイデアを思い付くが、彼らは、しかし満足のいくようではありません。最初のクライアント側で>
1を古い値は、オブジェクトを入れて行く上に合計を追加します。
2>コプロセッサを使用してください。 RegionObserver.prePutでは、最終的にを入力してオブジェクトを取得、追加、変更します。これは、計算をサーバー側にプッシュしますが、最初は余分なクエリ(get)(これは高価な可能性があります)を最初に必要とします。
リアルタイムクエリのシナリオでも上記の作業がありますが、バルクロードのデータマージはどうですか?
私はしばらくの間文書を読んできましたが、まだ手がかりを見つけることはできません。私はあなたがこれについていくつかのアイデアを共有することができれば本当に感謝します。
私はhbase-1.2.6を使用しています。ありがとう!
私の場合、新しいセルの値は何とかして既存のセルに依存し、単純なincrやappendよりも複雑になります。たとえば、私は整数のKである古いセルの値を持っています。これをK_new = K^K 'に更新したいとします。ここで、K'は生産からのある種の増分の種類の値です。多分関連するAPIを見つけました:テーブル:: checkAndPut(https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/HTable.html#checkAndPut-byte:A-byte:A-byte: A-byte:A-org.apache。hadoop.hbase.client.Put-)。しかし、私はどのようにそれを使用するか分からない。それが助けになると思いますか?ありがとう。 – user1206899
私は上にリストされたAPIは、原子操作を達成するのに役立つと思う。最終的には、何か意味のあるものを置くことが必要です。 – user1206899