hbase用来替换现有的列值

时间:2013-03-14 09:59:41

标签: hadoop hbase

我想使用put替换行中的列的内容,但它正在添加更新版本的数据。尝试添加时间戳,但仍会创建具有不同版本的新值。 有没有想法替换相同版本的内容?

2 个答案:

答案 0 :(得分:3)

您确定使用了正确的时间戳值吗?

我为你做了一个例子(在hbase shell中):

首先,我们创建一个名为tmp1的表,其中一个列族名为f1,每个单元格可以有三个版本:

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,列名r1和时间戳f1:c1执行另一个1,但使用不同的值v2:< / p>

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

答案 1 :(得分: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);