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);
所以我正在尝试在 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);