hbase put替换现有列值

j2datikz  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(375)

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

carvr3hs

carvr3hs1#

您确定使用了正确的时间戳值吗?
我为您举了一个例子(在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 :

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 .

toiithl6

toiithl62#

直接从hbase文档:

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);

相关问题