2016-06-02 3 views
1

J'ai une table qui a une chaîne comme clé et un timeuuid comme colonne de mise en cluster. Je voudrais faire une mise à jour basée sur timeuuid < now().Mise à jour des lignes avec timeuuid comme colonne de mise en cluster

Exemple:

UPDATE table SET is_used = true WHERE key1 = 'value' AND created_at < timeuuid('2016-02-03') IF is_used != true; 

Mais obtenir

InvalidRequest: code=2200 [Invalid query] message="Invalid operator < for PRIMARY KEY part created_at 

Y at-il moyen ou une solution pour cela? Pourquoi la colonne clustering est-elle considérée comme clé primaire dans ce cas?

Tous les meilleurs

---- Update1: ---

J'utilise la version 2.2 du cassandra de schéma est le suivant:

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

quelle version de cassandra utilisez-vous? Aussi, pouvez-vous partager votre schéma de table? Cela peut être possible (relations de portée sur les clés de clustering) dans cassandra 3.x, mais ne peut pas se souvenir à coup sûr –

Répondre

2

Malheureusement, il ne fonctionne pas On dirait que vous pouvez faire UPDATEs où la colonne de clustering est restreinte sur une plage, même dans le C * 3.5. D'après ce que je peux dire que vous devez spécifier la clé primaire entière lors d'un UPDATE, il ne peut pas être appliqué à une plage de données. Comme vous effectuez une mise à jour conditionnelle de toute façon, vous pouvez d'abord SELECT identifier les lignes candidates à modifier, puis effectuer les mises à jour dans un lot (puisqu'elles s'appliquent toutes à la même partition, cela est correct).