2012-12-02 28 views
8
  1. HBase'de yeniyim, HBase istemci API'sinde buluyorum, güncelleme işlemi desteklenmiyor mu? Bu doğru mu?
  2. Öyleyse, belirli bir satır anahtarının değerlerini güncellemek için önerilen en iyi yöntemler nedir?

cevap

11

Herhangi bir hücrenin değerini oluşturacak veya güncelleyecek olan PUT'u kullanabilirsiniz. 'un yeni sürümünün eski hücrelerden bazılarını içermesini istemediğiniz sürece silmeniz gerekmez. f1: c1 yeni değer ve almak istiyorum:

Eğer r1 koyabilirsiniz biz

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

söylüyorlar aslında her hücre rowkey, kolon aile olarak depolanır

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

Not, hücre, zaman damgası, sürüm ve değer. Dolayısıyla, sürüm oluşturmayı (sütun ailesi başına) nasıl ayarlayacağınıza bağlı olarak, silinen değerleri görmek için zaman sorgusunda bir nokta yapmak da dahil olmak üzere eski değerlere de erişebilirsiniz.

+0

Teşekkürler, cevabınız açıktır ve HBase'yi daha iyi anlama konusunda bana yardımcı oldu (ki sadece araştırmaya başlamam mümkün değil). – tonio

+3

Merhaba @Arnon, sorum, atomik şekilde güncellenme hakkında daha fazla. Bir atomik işlem sırasına göre okuma (GET) yapmak ve güncellemek istiyorum. Güncellemenin nasıl yapıldığına bakılması, okunan değere bağlı olduğundan okuma ve güncelleme arasında herhangi bir güncellemeden kaçınmak istiyorum. Örneğinizde, hedefe nasıl ulaşılır? –

+4

, HTable API'sinde checkAndPut veya checkAndDelete'yi kullanabilirsiniz http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html#checkAndPut (byte [], byte [], byte [] , byte [], org.apache.hadoop.hbase.client.Put) –

4

Yapmak istediğiniz şeyin bir Kola işlemi gerçekleştirmesi olduğunu düşünüyorum. HBase'nin Put API client docs'un yanı sıra bazı örnekler için Java Example Code using HBase Data Model Operations başlıklı bu blog yazısına ve işlemlerin açıklamalarına bakabilirsiniz.

Bir satırı güncellemek için, tek bir Mutasyonda "Sil" ve "Koy" sekansı yayınlamanız gerekir, böylece bunlar harici olarak bir güncelleme olarak görülür. Böyle bir çağrıyı nasıl oluşturacağınıza ilişkin Class RowMutations documentation numaralı telefona bakın.

+0

Merhaba tonio, yanılıyorsam düzeltin. Herhangi bir Put API desteği güncelleme işlemi göremiyorum veya örnek kodda. Güncelleme için, bir HBase tablosunda zaten bir satır var, örneğin satır anahtarı r1, ve c1 adında bir sütun var ve r1/c1 hücresinde değer var. Güncelleme için demek istiyorum ki, r1/c1 hücresinin değerini başka bazı değerlere değiştirmek istiyorum. Yanılıyorsam lütfen beni düzeltmekten çekinmeyin. –

+0

Doğru, bir satırdaki değerleri değiştirmek istiyorsanız, silme işlemini birleştirip atomik bir çağrı yapmanız gerekir. Güncellenmiş cevaba bakınız. – tonio

+0

Teşekkürler, sorumu yanıtladı. –