2017-05-14 3 views
0

最近Cassandraの使用を開始しましたが、Cassandraはユーザーが主キーでテーブルのすべてのレコードを削除できないようにします。 すべてのクラスタキーも指定する必要があります。Cassandra - すべてのレコードを主キーで更新します。一致しない入力エラー

私のような標準のSQLを使用してみました:私は取得していますエラーがある

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

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

お知らせください。

+0

あなたのテーブルのスキーマがどのようなものですか?お勧めですか –

答えて

0

cassandraではネストされたクエリを使用できません。

2つの個別のクエリを使用する必要があります。

まずそれぞれについて、すべてのuser_id

SELECT user_id FROM mytable WHERE COUNTRY = 'XXX' 

mytableからセカンドを選択するには、あなたが executeAsyncを使用して2番目のクエリを実行することができ、前のステップ

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

で見つけUSER_ID。

user_idは、パーティション・キーである場合は、更新するために、クエリで使用することができますが、user_idリストのサイズが小さい

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

これは最初のクエリの結果を保存し、それをUPDATEクエリに使用する必要があることを意味します。 'executeAsync'とは何ですか? –

+0

'executeAsync'は、非ブロッキングの方法でクエリを実行します。詳細はhttps://www.datastax.com/dev/blog/java-driver-async-queriesをご覧ください。 –

関連する問題