12
votes

My table looks like this

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

I want update all the rows with user_id = 'xxx' without having to specify all the clustering indexes.

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

Error: message="Missing mandatory PRIMARY KEY part real_time

I have tried creating a secondary index, but its not allowed on the primary key.

How can i solve this?

I chose user_id to be in the primary key cause i want to be able to do select * from Notes where user_id = 'xxx' should be possible.

1

1 Answers

14
votes

While this might be possible with a RDBMS and SQL, it is not possible with cql in Cassandra. From the DataStax documentation on the UPDATE command:

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.

You'll probably need to write something quick in Python (or one of the other drivers) to perform this type of update.