Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra:与其他值一起更新或插入贴图值_Cassandra - Fatal编程技术网

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)