2013-03-14 53 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);