2012-12-02 37 views
8
  1. Tôi mới dùng HBase, tôi tìm thấy trong API khách hàng HBase, hoạt động cập nhật không được hỗ trợ? Đúng không?
  2. Nếu có, các phương pháp hay nhất được đề xuất để cập nhật giá trị cho một khóa cụ thể là gì?

Trả lời

11

Bạn có thể sử dụng PUT để tạo hoặc cập nhật giá trị của bất kỳ ô nào. Bạn không cần sử dụng xóa trừ khi bạn muốn phiên bản mới không có một số ô cũ.

nói rằng chúng ta có

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

bạn có thể đặt r1: f1: c1 giá trị mới và bạn sẽ nhận được:

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

Lưu ý rằng trên thực tế mỗi tế bào được lưu giữ như rowkey, gia đình cột, ô, dấu thời gian, phiên bản và giá trị. Vì vậy, tùy thuộc vào cách bạn thiết lập phiên bản (mỗi cột gia đình) bạn cũng có thể truy cập các giá trị cũ bao gồm thực hiện một truy vấn điểm trong thời gian để xem các giá trị đã xóa.

+0

Cảm ơn, câu trả lời của bạn là rõ ràng và giúp tôi hiểu rõ hơn về HBase (tôi chỉ mới bắt đầu điều tra). – tonio

+3

Hi @Arnon, câu hỏi của tôi là nhiều hơn về cách cập nhật theo cách nguyên tử. Tôi muốn đọc (GET) và cập nhật trong một chuỗi hoạt động nguyên tử. Giả sử trong một trường hợp làm thế nào để cập nhật phụ thuộc vào giá trị đọc, vì vậy tôi muốn tránh bất kỳ cập nhật giữa đọc và cập nhật. Trong mẫu của bạn, làm thế nào để đạt được mục tiêu? –

+4

bạn có thể sử dụng checkAndPut hoặc checkAndDelete trong API HTable http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#checkAndPut (byte [], byte [], byte [] , byte [], org.apache.hadoop.hbase.client.Put) –

4

Tôi nghĩ điều bạn muốn làm là thực hiện thao tác Đặt. Bạn có thể xem số Put API client docs của HBase cũng như bài đăng trên blog này có tiêu đề: Java Example Code using HBase Data Model Operations để biết một số ví dụ và mô tả về các thao tác.

Để cập nhật một hàng, bạn sẽ phải phát một chuỗi "Xóa" và "Đặt", trong một Đột biến duy nhất, vì vậy chúng được xem là bản cập nhật bên ngoài.

Xem Class RowMutations documentation về cách tạo cuộc gọi như vậy.

+0

Hi tonio, sửa tôi nếu tôi sai. Tôi không thấy bất kỳ hoạt động cập nhật hỗ trợ API nào hoặc trong mã mẫu. Để cập nhật, có nghĩa là đã có một hàng trong bảng HBase, ví dụ, khóa hàng là r1, và nó có một cột được gọi là c1 và có giá trị trong ô r1/c1. Để cập nhật, tôi muốn tôi muốn thay đổi giá trị cho ô r1/c1 thành một số giá trị khác. Xin vui lòng sửa tôi nếu tôi sai. –

+0

Phải, nếu bạn muốn thay đổi các giá trị trong một hàng, bạn phải kết hợp xóa và đặt trong một cuộc gọi nguyên tử. Xem câu trả lời cập nhật. – tonio

+0

Cảm ơn, câu hỏi của tôi đã được trả lời. –

Các vấn đề liên quan