使用现有值在 HBase 中更新

Upsert in HBase using existing value

我正在使用 HBase 存储一些流数据,并且我的值从一个插入演变成另一个,并且使用现有值。

我有一个这样创建的 table :

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

table 将包含一个字段,名为 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 和 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>

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