1

我有一个表,它有一个字符串作为键,一个 timeuuid 作为集群列。

我想做的是,基于timeuuid < now().

例子:

UPDATE table SET is_used = true WHERE key1 = 'value' AND created_at < timeuuid('2016-02-03') IF is_used != true;

但是得到

InvalidRequest: code=2200 [Invalid query] message="Invalid operator < for PRIMARY KEY part created_at

是否有任何解决方法或解决方案?为什么在这种情况下将聚类列视为主键?

祝一切顺利

----更新1:---

我正在使用 cassandra 2.2 版,架构如下:

CREATE TABLE book (
created_at timeuuid,
book_type varchar,
book_title varchar
PRIMARY KEY ((book_type), created_at)) WITH CLUSTERING ORDER BY (book created_at DESC);
4

1 回答 1

2

不幸的是,即使在 C* 3.5 中,您似乎也无法在集群列被限制在某个范围内的情况下执行更新。

据我所知,您必须在执行 UPDATE 时指定整个主键,它不能应用于一系列数据。

当您无论如何都在进行条件更新时,您可以SELECT首先确定要更改的候选行,然后批量进行更新(因为它们都适用于同一个分区,这是可以的)。

于 2016-06-02T15:20:21.440 回答