Обновить строки с помощью timeuuid в качестве столбца кластеризации

У меня есть таблица, которая имеет String в качестве ключа и 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

Есть ли обходной путь или решение для этого? Почему в этом случае столбец кластеризации считается первичным ключом?

Всего наилучшего

---- Update1: ---

Я использую 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);

1 ответ

Решение

К сожалению, похоже, что вы не можете делать ОБНОВЛЕНИЯ, когда столбец кластеризации ограничен диапазоном, даже в C* 3.5.

Из того, что я могу сказать, вы должны указать весь первичный ключ при выполнении ОБНОВЛЕНИЯ, его нельзя применить к диапазону данных.

В любом случае, если вы делаете условное обновление, вы можете сделать SELECT сначала определить подходящие строки для изменения, а затем выполнить обновления в пакете (так как все они применяются к одному и тому же разделу, это нормально).

Другие вопросы по тегам