是否可以通过单个Cassandra CQL查询更新一个值并删除另一个值?

时间:2013-07-24 18:50:32

标签: cassandra cql3

给出一张表:

CREATE TABLE t (
    k text,
    v1 int,
    v2 int,
    PRIMARY KEY (k)
)

是否可以将v1设置为某个值并使用单个查询删除(设置为空)v2?类似的东西:

UPDATE t SET v1=100, v2=NULL WHERE k='somekey';

我查看了文档,但一无所获。

有这个功能会有两个原因:

  • 使用预准备语句更新包含大量列的表现在真的很痛苦。
  • 如果我的理解是正确的,单个查询的行更新应该是原子的,而不能保证两个后续查询。

2 个答案:

答案 0 :(得分:3)

您建议的查询(至少)在CQL3中起作用:

cqlsh:ks> UPDATE t SET v1=100, v2=NULL WHERE k='somekey';
cqlsh:ks> select * from t;

 k       | v1  | v2
---------+-----+------
 somekey | 100 | null

如果您想进行更复杂的原子更新,例如在不同的行键或列系列中,您可以在BEGIN BATCH ... APPLY BATCH中打包单独的更新。

答案 1 :(得分:0)

如果您只想删除数据,则可以考虑使用DELETE operation来更新为null,这些数据在列和/或行上以原子方式工作。

您提到找不到文档。这是与Richard的优秀答案相关的文档:   - 单个查询对单行的更新是atomic by default。   - Batch operations自1.2以来也是原子的