2014-12-04 11 views
9

Moja tabela wygląda tak
jak zaktualizować wiersze w Kasandra za pomocą tylko klucza partycji?

create table Notes(
    user_id varchar, 
    real_time timestamp, 
    insertion_time timeuuid, 
    read boolean PRIMARY KEY (user_id,real_time,insertion_time) 
); 

create index read_index on Notes (read); 

Chcę zaktualizować wszystkiewierszy więcej z user_id = 'xxx' bez mającego określić wszystkie indeksy klastrowe.

UPDATE Notes SET read = true where user_id = 'xxx'; // Says Error 

Błąd:.? Message = "Brak obowiązkowych klucz podstawowy Część real_time

Próbowałem tworzenia indeksu wtórnego, ale jej nie pozwolono na klucz podstawowy

Jak mogę rozwiązać ten

wybrałem uSER_ID być w pierwotnej przyczyny kluczowego chcę być w stanie zrobić select * from Notes where user_id = 'xxx' powinno być możliwe.

Odpowiedz

8

Chociaż może to być możliwe z RDBMS i SQL, nie jest to możliwe z cql w Cassandra. Z dokumentacji DataStax na komendę UPDATE:

Each update statement requires a precise set of primary keys to be specified using a WHERE clause. You need to specify all keys in a table having compound and clustering columns.

Pewnie trzeba napisać coś szybko w Pythonie (lub jeden z pozostałych kierowców) do wykonywania tego typu aktualizacji.

+2

Chociaż powyższa odpowiedź jest poprawna, myślę, że warto wspomnieć, że można użyć klauzuli "IN" dla ostatniej kolumny klucza podstawowego (tj. 'Insertion_time' z pytania autorów). W zależności od przypadku użycia przydatne jest zmniejszenie wymaganej ilości instrukcji CQL. – user909481

Powiązane problemy