使用 IN 运算符在 Clustering 列中更新和删除 Cassandra

Cassandra Update and Delete in Clustering column Using IN operator

这是我的table

CREATE TABLE quorum.omg (
id int,
a int,
b text,
c text,
PRIMARY KEY ((id, a), b)
) WITH CLUSTERING ORDER BY (b DESC)

当我使用 IN 运算符执行 select 语句时,它适用于最后一个分区键和最后一个集群键

SELECT * FROM  omg WHERE id=1 AND a IN ( 1,2) AND b IN ( 'a','b' ) ;

 id | a | b | c
----+---+---+----
  1 | 1 | b | hi
  1 | 2 | a | hi

但是当我更新和删除它时会抛出这样的错误

UPDATE omg SET c = 'lalala' WHERE id=1 AND a IN ( 1,2) AND b IN ( 'a','b' ) ;
InvalidRequest: code=2200 [Invalid query] message="Invalid operator IN for PRIMARY KEY part b"

DELETE from omg  WHERE id=1 AND a IN ( 1,2) AND b IN ( 'a','b' ) ;
InvalidRequest: code=2200 [Invalid query] message="Invalid operator IN for  PRIMARY KEY part b"

我的错误是什么?提前致谢。

一般来说,最好避免需要允许过滤的查询,因为即使只返回少量数据,它们通常也需要扫描大量数据,但我展示了这个例子,因为它支持使用IN 运算符。

更多详细信息参考此link http://mechanics.flite.com/blog/2014/01/08/the-in-operator-in-cassandra-cql/

来自关于 UPDATE (http://docs.datastax.com/en/cql/3.1/cql/cql_reference/update_r.html) 的 DataStax 文档:

The IN relation is supported only for the last column of the partition key.

您的最后一个分区键是 a,但您正试图在您的集群键 b 上使用它。尝试 UPDATE/DELETE 在 WHERE 子句中使用特定的、完整的主键。