2014-08-29 50 views
0

我想知道使用Java API在單個put調用中覆蓋單元值的行爲是什麼。例如在一次撥號呼叫中覆蓋hbase單元

HTable table; 
.... 
Put p = new Put("key".getBytes()); 
p.add("cf".getBytes(), "qualifier".getBytes(), "value1".getBytes()); 
p.add("cf".getBytes(), "qualifier".getBytes(), "value2".getBytes());` 
table.put(p); 

我想知道這是什麼行爲?

  1. 是否只有一行版本的單元格插入「key」?如果是的,哪一個?
  2. 爲行「key」插入單元格是否會有兩個版本?如果是,訂單是什麼?

如果記錄在某處,那麼指向文檔的鏈接也將很好閱讀。

回答

0

我驗證了使用簡單的代碼

public class HbaseSample { 
    public static void main(String[] args) throws IOException { 
    Configuration config = HBaseConfiguration.create(); 
    HTable table = new HTable(config, "ehsan_test"); 
    Put p = new Put("key".getBytes()); 
    p.add("cf1".getBytes(), "qualifier".getBytes(), "value1".getBytes()); 
    p.add("cf1".getBytes(), "qualifier".getBytes(), "value2".getBytes()); 
    table.put(p); 
    } 
} 

它看起來像選項(1)中的問題是正確的行爲。更多的是存儲的「value2」。 任何文檔參考,仍然將不勝感激。

0

總之,第一個add呼叫被第二個覆蓋。相反,文檔的參考,讓我們走過代碼:

  • addPut電話createPutKeyValue實例
  • 它使用相同的參數爲行鍵,列家庭和資格賽產生的KeyValue的情況下,在這種情況下, ,
  • Put中的familyMap以姓氏爲關鍵字,所以第二次調用add將替換第一個中指定的值。

等最後一個贏了;)