2013-03-14 44 views
2

我想用put替換一行中的列的內容,但它是添加更新版本的數據。嘗試添加時間戳,但仍然創建不同版本的新值。 任何想法替換相同版本的內容?hbase用來替換現有的列值

回答

3

您確定您使用了正確的時間戳值嗎?

我已經爲你一個例子(HBase的殼):

首先,我們創建了一個名爲f1一個列族名爲tmp1檯面,可對每個電池三個版本:

hbase(main):005:0> create 'tmp1', {NAME => 'f1', VERSIONS => 3} 
0 row(s) in 1.1160 seconds 

接下來,我們把一排與價值v1到表:

hbase(main):007:0> put 'tmp1', 'r1', 'f1:c1', 'v1', 1 
0 row(s) in 0.0860 seconds 
hbase(main):008:0> scan 'tmp1' 
    ROW           COLUMN+CELL 
    r1           column=f1:c1, timestamp=1, value=v1 
1 row(s) in 0.0390 seconds 

然後,我們做的是另put具有相同rowkey r1,列名f1:c1和時間戳1,但有不同的價值v2

hbase(main):009:0> put 'tmp1', 'r1', 'f1:c1', 'v2', 1 
0 row(s) in 0.0060 seconds 

hbase(main):008:0> scan 'tmp1' 
    ROW           COLUMN+CELL 
    r1           column=f1:c1, timestamp=1, value=v2 

正如你所看到的,細胞已被替換爲新的價值v2

+0

謝謝你們..問題是與時間戳..我不得不使用相同的時間戳,因爲它是有一排..它現在已經取代列值.. – tousif 2013-03-15 05:11:15

1

直出HBase的documentation的:

Put put = new Put(Bytes.toBytes(row)); 
long explicitTimeInMs = 555; // just an example 
put.add(Bytes.toBytes("cf"), Bytes.toBytes("attr1"), explicitTimeInMs, Bytes.toBytes(data)); 
htable.put(put);