2014-12-04 23 views
9

Il mio tavolo si presenta così
come UPDATE fila in cassandra usando solo Partition Key?

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); 

voglio aggiornamento tutte lerighe con user_id = 'xxx' senza dover specificare tutti gli indici di clustering.

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

errore:.? Message = "obbligatorio PRIMARY KEY parte real_time mancante

Ho provato a generare un indice secondario, ma la sua non consentito sulla chiave primaria

Come posso risolvere questo

ho scelto id_utente di essere la causa chiave primaria voglio essere in grado di fare select * from Notes where user_id = 'xxx' dovrebbe essere possibile.

risposta

8

Anche se questo potrebbe essere possibile con un RDBMS e SQL, non è possibile con cql in Cassandra. Dalla documentazione DataStax sul comando 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.

Avrete probabilmente bisogno di scrivere qualcosa di veloce in Python (o uno degli altri piloti) per eseguire questo tipo di aggiornamento.

+2

Anche se la risposta riportata sopra è corretta, penso che valga la pena ricordare che è possibile utilizzare la clausola 'IN' per l'ultima colonna della chiave primaria (ad esempio' inserimento_time' dalla domanda autori). A seconda del caso d'uso questo è utile per ridurre la quantità richiesta di istruzioni CQL. – user909481