更新以 timeuuid 作为聚类列的行

Update rows with timeuuid as clustering column

我有一个 table,它有一个字符串作为键和一个 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);

不幸的是,即使在 C* 3.5 中,您也无法在聚类列受限于某个范围的情况下进行更新。

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

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