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

时间:2016-03-14 02:46:35

标签: 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中执行此操作?

2 个答案:

答案 0 :(得分:2)

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

梗概:

  

UPDATE keyspace_name.table_name

     

使用选项和选项

     

SET赋值,赋值,......

     

WHERE row_specification

     

IF column_name = literal AND column_name = literal。 。 。

     

IF EXISTS

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

答案 1 :(得分:0)

现在,您可以使用多个“或”来执行IF条件。只需使用if field in (value1, value2)

UPDATE my_dbs.foo SET col1=5 WHERE id=1 IF col1 in (null, 1, 2, 3);