使用现有值在hbase中upsert

kiayqfof  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(387)

我使用hbase来存储一些流数据,我有一些值,这些值从一个插入到另一个插入,并且使用现有的值。
我有一个这样创建的表:

hbase(main):005:0> create ‘mytable’,’mycolfam’

该表将包含一个名为val的字段
首先,我插入数据(key=1,val=10):

hbase(main):005:0> put 'mytable','1','mycolfam:val',10

然后,我有相同键“1”(key=1,val=12)的传入数据,hbase中插入的值必须是新值和旧值的总和(10+12)。

hbase(main):005:0> put 'mytable','1','mycolfam:val',oldvalue+newvalue

我尝试了get first来获取旧值,但是我想以一种更优化的方式来实现它。
有人知道怎么做吗?谢谢。

oxalkeyp

oxalkeyp1#

可以使用计数器和增量进行此操作。它将在单个事务中执行,不同于执行get和put来增加值。
请注意,存储的值是二进制格式的。

hbase(main):003:0> incr 'mytable', '1', 'mycolfam:val', 1
COUNTER VALUE = 1
Took 0.1761 seconds
hbase(main):004:0> get 'mytable', '1', 'mycolfam:val'
COLUMN                                    CELL
 mycolfam:val                             timestamp=1554226437325, value=\x00\x00\x00\x00\x00\x00\x00\x01
1 row(s)
Took 0.0379 seconds
hbase(main):005:0> incr 'mytable', '1', 'mycolfam:val', 10
COUNTER VALUE = 11
Took 0.0086 seconds
hbase(main):006:0> get 'mytable', '1', 'mycolfam:val'
COLUMN                                    CELL
 mycolfam:val                             timestamp=1554226478551, value=\x00\x00\x00\x00\x00\x00\x00\x0B
1 row(s)
Took 0.0207 seconds
hbase(main):007:0>

要从值中减去,只需使用负数作为最后一个参数。

相关问题