2

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

4

2 回答 2

3

IF 子句中不支持 OR 逻辑运算符。从这里的文档:

概要:

更新 keyspace_name.table_name

使用选项和选项

SET 赋值,赋值,...

WHERE row_specification

IF column_name = literal AND column_name = literal 。. .

如果存在

也许要么做两个单独的更新来覆盖这两种情况,要么在插入时用默认的非空值填充 col1 ,因为这不会损害您的应用程序逻辑。

于 2016-04-06T05:30:47.667 回答
1

现在你可以用几个“或”来做 IF 条件。只需使用if field in (value1, value2)

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

于 2020-07-07T13:33:36.793 回答