2016-06-02 4 views
1

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

Я использую Кассандры версии 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); 
+0

какая версия кассандры вы используете? Также вы можете поделиться своей схемой таблиц? Это может быть возможно (диапазон отношений на клавишах кластеризации) в cassandra 3.x, но не может точно помнить –

ответ

2

К сожалению, это не похоже, что вы можете делать UPDATE, где столбец кластеризации ограничен диапазоном, даже в C * 3.5.

Из того, что я могу сказать, вам нужно указать весь первичный ключ при выполнении UPDATE, он не может применяться к диапазону данных.

Как вы все равно выполняете условное обновление, сначала вы можете сделать SELECT, чтобы идентифицировать строки-кандидаты для изменения, а затем делать обновления в пакете (поскольку все они относятся к одному и тому же разделу, это нормально).

 Смежные вопросы

  • Нет связанных вопросов^_^