cql - Cassandra轻量级事务/CAS中的多个IF条件

标签 cql cassandra-2.1 paxos

因此,我尝试在 Cassandra 中执行 CAS(比较和设置)类型操作,仅当特定非主键列为 NULL 时,我才想进行数据更新。或< ?哪里?由客户端代码提供。

我该怎么做?类似以下内容不起作用:

UPDATE my_dbs.foo SET col1=5 WHERE id=1 IF (col1 = NULL OR col1 < 4);

我得到的错误类似于以下内容:

SyntaxException: <ErrorMessage code=2000 [Syntax error in CQL query] message="line 1:149 no viable alternative at input '(' (...

如何在 Cassandra 2.0/2.1 中执行此操作?

最佳答案

IF 子句中不支持 OR 逻辑运算符。来自文档here :

概要:

UPDATE keyspace_name.table_name

USING option AND option

SET assignment, assignment, ...

WHERE row_specification

IF column_name = literal AND column_name = literal . . .

IF EXISTS

也许可以进行两次单独的更新来涵盖这两种情况,或者在插入时使用默认的非空值填充 col1,因为这不会损害您的应用程序逻辑。

关于cql - Cassandra轻量级事务/CAS中的多个IF条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978746/

相关文章:

Cassandra 时间数据类型

distributed-computing - 避免在分布式系统中过度使用共识协议(protocol)

java - 如何从结果集中检索列值

cassandra - 选择与特定日期对应的 timeuuid 列

node.js - 列 ID 的未设置值无效

apache-zookeeper - 在分布式存储中实现线性化是否需要复制日志

algorithm - Paxos phase 2a 消息丢失

cassandra - 带有时间戳范围的 SELECT 请求中出现超时错误

cassandra - 如何将数据完全复制到新的cassandra集群节点?

database - 如何使用cassandra数据库创建唯一键