Angenommen, ich habe eine Spalte, die inkrementell anders als das Überschreiben aktualisiert wird (wie ein bitweises Integer-Flag oder eine Summenspalte). Zum Beispiel (unter der Annahme, nur 1-Version):Kann ich in hbase Zellen zusammenführen?
Bestehende Cell: [key: 'k1', f1: Summe: 100]
anstende New Cell: [key: 'k1', f1: Summe: 200 ]
Dann möchte ich die Zellendaten auf diese Weise aktualisieren: sum = 100 + 200 = 300. Nachgeben der Endaufzeichnung:
[key: 'k1', f1: Summe: 300]
Hier möchte ich MERGE die neue Zelle in die alte mit dem gleichen Schlüssel. Wie kann ich das erreichen? Eine direkte setzen würde einfach die alte Zelle überschreiben. (Wiederum wird nur eine Version gepflegt).
komme ich mit einem paar Ideen, aber sie scheinen nicht jedoch erfüllt:
1> Auf der Clientseite ersten erhält der alte Wert dann Summe addieren, auf dem Gehen Objekt setzen.
2> Verwenden Sie einen Coprozessor. In RegionObserver.prePut mache ich ein erhalten, hinzufügen und ändern Sie die endgültige Put Objekt. Dies drückt die Berechnung auf die Serverseite, benötigt aber immer noch eine zusätzliche Abfrage (get) (was teuer sein könnte).
Neben der oben genannten Arbeit in Echtzeit-Abfrage-Szenario, aber was ist mit Bulk-Load-Daten zusammenführen?
Ich habe die Dokumente eine ganze Weile durchgelesen, kann aber noch keine Anhaltspunkte finden. Ich würde es wirklich schätzen, wenn Sie eine Idee dazu teilen könnten.
Ich verwende hbase-1.2.6. Vielen Dank!
In meinem Fall hängt der neue Zellenwert irgendwie von der vorhandenen Zelle ab und könnte komplexer sein als ein einfacher incr oder append. Zum Beispiel habe ich einen alten Zellenwert, der eine Ganzzahl K ist, und ich möchte ihn auf K_new = K^K 'aktualisieren, wobei K' eine inkrementelle Art von Wert aus der Produktion ist. Ich habe eine vielleicht verwandte API gefunden: Table :: checkAndPut (https://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/client/HTable.html#checkAndPut-byte:A-byte:A-byte: Ein Byte: A-org.apache.hadoop.hbase.client.Put-). Aber ich bin mir nicht sicher, wie ich es benutzen soll. Denkst du, dass es helfen kann? Vielen Dank. – user1206899
Ich denke, die API, die ich oben aufgeführt habe, hilft nur, atomare Operation zu erreichen. Am Ende muss ich einen Schritt machen, gefolgt von einem Put in welchem Sinn auch immer. – user1206899