【问题标题】:Cassandra Update and Delete in Clustering column Using IN operator使用 IN 运算符在聚类列中更新和删除 Cassandra
【发布时间】:2015-07-31 16:10:25
【问题描述】:

这是我的桌子

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 * 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"

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

【问题讨论】:

标签: cassandra cql


【解决方案1】:

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

仅分区键的最后一列支持 IN 关系。

您的最后一个分区键是a,但您正尝试在集群键b 上使用它。尝试在 WHERE 子句中使用特定的完整主键来更新/删除。

【讨论】:

  • 谢谢.... 对于我的结论:对于 UPDATE / DELETE 只有分区键的最后一列才支持 IN 关系。对于 SELECT,最后一个分区键和最后一个集群键支持 IN 关系。
【解决方案2】:

一般来说,最好避免需要 ALLOW FILTERING 的查询,因为即使只返回少量数据,它们也经常需要扫描大量数据,但我展示了该示例,因为它支持使用 IN 运算符.

更多详情请参考此链接 http://mechanics.flite.com/blog/2014/01/08/the-in-operator-in-cassandra-cql/

【讨论】:

  • 谢谢,但我没有在我的选择语句中使用 ALLOW FILTERING。
  • SELECT 语句可以正常工作,为什么不能更新和删除??
  • 感谢您的回复和时间@Mukesh
猜你喜欢
  • 2015-01-22
  • 2018-07-30
  • 2015-05-05
  • 2018-04-15
  • 2018-09-13
  • 2015-11-11
  • 2014-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多