所以我试图在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中执行此操作?
答案 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);