更新以 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
以确定要更改的候选行,然后批量进行更新(因为它们都适用于同一个分区,这是好的)。
我有一个 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
以确定要更改的候选行,然后批量进行更新(因为它们都适用于同一个分区,这是好的)。