Cassandra:与其他值一起更新或插入贴图值
我有一张这样的桌子:Cassandra:与其他值一起更新或插入贴图值,cassandra,Cassandra,我有一张这样的桌子: (id, a, b, mapValue) 如果存在,我想更新;如果不存在,我想插入值(id、a、b、mapValue)。其中mapValue是旧mapValue与新mapValue的组合,替换已存在的每个键的值 例如,如果旧的映射值是{1:c,2:d},而新的映射值是{2:e,3:f},则结果将是{1:c,2:e,3:f}。 我想在一个查询中执行此操作,该查询还可以在值(id,a,b,mapValue)中更新/插入id,a,b 我怎样才能做到这一点? 我找到了关于更新地图
(id, a, b, mapValue)
如果存在,我想更新;如果不存在,我想插入值(id、a、b、mapValue)
。其中mapValue是旧mapValue与新mapValue的组合,替换已存在的每个键的值
例如,如果旧的映射值是{1:c,2:d}
,而新的映射值是{2:e,3:f}
,则结果将是{1:c,2:e,3:f}
。
我想在一个查询中执行此操作,该查询还可以在值(id,a,b,mapValue)
中更新/插入id,a,b
我怎样才能做到这一点?
我找到了关于更新地图的指南,但它没有说明在处理表中的其他值时如何更新地图。我需要同时执行此操作。在Cassandra中,插入和更新之间没有区别-所有操作都是向上插入的,因此当您执行
更新时,数据不存在,就会插入。或者,如果您执行了INSERT
,并且数据已经存在,则会对其进行更新
关于地图更新,您可以在执行更新时在相应列上使用+
和-
操作。例如,我有一个表:
CREATE TABLE test.m1 (
id int PRIMARY KEY,
i int,
m map<int, text>
);
我可以使用类似的UPDATE
命令插入全新的数据:
cqlsh:test> update test.m1 set m = m + {6:'t6'}, i = 6 where id = 6;
cqlsh:test> select * from test.m1;
id | i | m
----+---+--------------------
1 | 4 | {1: 't1', 2: 't2'}
6 | 6 | {6: 't6'}
(2 rows)
通常,如果您知道给定主键之前不存在数据,然后,使用+
更新是将数据插入集合
或映射
的更好方法,因为它不会生成在集合列上执行插入
或更新
时生成的墓碑
另外,您可以在中找到有关使用集合的更多信息
cqlsh:test> update test.m1 set m = m + {6:'t6'}, i = 6 where id = 6;
cqlsh:test> select * from test.m1;
id | i | m
----+---+--------------------
1 | 4 | {1: 't1', 2: 't2'}
6 | 6 | {6: 't6'}
(2 rows)