2017-05-14 2 views
0

Ich habe kürzlich begonnen, Cassandra zu verwenden, und ich verstehe, dass Cassandra verhindert, dass ein Benutzer alle Datensätze in einer Tabelle nach Primärschlüssel löscht. Da müssen Sie auch alle Cluster-Schlüssel bereitstellen.Cassandra - alle Datensätze nach Primärschlüssel aktualisieren, nicht übereinstimmender Eingabefehler

Ich habe versucht, die Standard-SQL verwenden wie:

UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id IN (SELECT user_id FROM my_table WHERE COUNTRY = 'XXX'); 

Der Fehler Ich erhalte ist:

SyntaxException: line 1:113 mismatched input 'SELECT' expecting ')' (... 1 AND user_id IN ([SELECT]...) 

Bitte beraten.

+0

Was ist Ihr Tabellenschema? –

Antwort

0

Sie können verschachtelte Abfragen in Cassandra nicht verwenden.

Sie müssen zwei separate Abfrage verwenden.

Wählen Sie zuerst alle user_id von mytable

SELECT user_id FROM mytable WHERE COUNTRY = 'XXX' 

Sekunde für jede User_ID in den vorherigen Schritten gefunden

UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id = 'XXX' 

Sie können die zweite Abfrage ausführen executeAsync verwenden.

Wenn user_id die Partition Schlüssel ist, können Sie auch in Abfrage zu aktualisieren, aber geringe Größe der user_id Liste empfehlen

UPDATE my_table SET is_deleted = 'true' WHERE COUNTRY = 'XXX' AND user_id in ('XXX', 'XXY', 'XXZ') 
+0

Das bedeutet also, ich muss die Ergebnisse der ersten Abfrage speichern und dann für die UPDATE-Abfrage verwenden. Was macht 'executeAsync'? –

+0

'executeAsync' führt die Abfrage auf nicht blockierende Weise aus. Weitere https://www.datastax.com/dev/blog/java-driver-async-queries –

Verwandte Themen