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

Multiple IF conditions in Cassandra lightweight transactions/CAS

所以我正在尝试在 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,因为这不会损害您的应用程序逻辑。

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

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