Обновить строки с помощью 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
сначала определить подходящие строки для изменения, а затем выполнить обновления в пакете (так как все они применяются к одному и тому же разделу, это нормально).