2016-06-02 12 views
1

Ich habe eine Tabelle, die einen String als Schlüssel und eine timeuuid als Clustering-Spalte hat.Aktualisieren Sie Zeilen mit timeuuid als Clustering-Spalte

Was ich tun möchte, ist, ein Update darauf basierend auf timeuuid < now() zu tun.

Beispiel:

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

Aber immer

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

Gibt es eine Abhilfe oder Lösung für das? Warum wird die Clusterspalte in diesem Fall als Primärschlüssel angesehen?

Alles Gute

---- Update1: ---

I cassandra Version 2.2 das Schema verwenden ist die folgende:

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

Welche Version von Cassandra verwenden Sie? Können Sie Ihr Tabellenschema auch teilen? Dies ist möglicherweise in Cassandra 3.x möglich (Bereichsbeziehungen für Clustering-Schlüssel), kann sich aber nicht sicher erinnern –

Antwort

2

Leider hat es nicht Es sieht so aus, als könnten Sie UPDATEs ausführen, bei denen die Clusterspalte in einem Bereich eingeschränkt ist, selbst in C * 3.5.

Von dem, was ich sagen kann, müssen Sie den gesamten Primärschlüssel angeben, wenn Sie ein UPDATE durchführen, kann es nicht auf eine Reihe von Daten angewendet werden.

Da Sie sowieso eine bedingte Aktualisierung tun, könnten Sie zuerst eine SELECT tun, um zu ändernde Kandidatenreihen zu identifizieren, und dann die Aktualisierungen in einem Batch durchführen (da sie alle für die gleiche Partition gelten, ist dies in Ordnung).

Verwandte Themen