но это не работает.
Это не дает нам достаточно информации, чтобы помочь вам. Обычно вы хотите предоставить сообщение об ошибке. Я создал вашу таблицу локально, вставил данные и попробовал ваш подход. Я вижу эту ошибку:
InvalidRequest: Error from server: code=2200 [Invalid query]
message="Some partition key parts are missing: title"
DELETE
требует, чтобы в предложении WHERE
были указаны соответствующие компоненты PRIMARY KEY. В вашем случае Authors
является , а не частью определения PRIMARY KEY. Учитывая возвращенное сообщение об ошибке (и определение таблицы), указав title
, это единственный способ удалить строки из этой таблицы.
aploetz@cqlsh:stackoverflow> DELETE FROM Books
WHERE title = 'Harry Potter and the Chamber of Secrets'
IF EXISTS;
[applied]
-----------
True
Могу ли я выполнить такой запрос? UPDATE Books SET Family = Family + {'Fantasy'} WHERE Authors CONTAINS 'J.K. Rowling';
Нет. Это терпит неудачу по той же причине. При записи в Cassandra (INSERT, UPDATE, DELETE - все записи) требуется первичный ключ (в частности, ключ раздела) в предложении WHERE
. Без этого Кассандра не может выяснить, на каком узле хранятся данные, и ей это необходимо для выполнения записи.