如何仅使用分区键更新cassandra中的行?

meh*_*azm 11 cql cassandra nosql cql3 datastax

我的桌子看起来像这样

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);
Run Code Online (Sandbox Code Playgroud)

我想更新所有USER_ID ="XXX" ,而不指定所有聚类索引.

UPDATE Notes SET read = true where user_id = 'xxx'; // Says Error
Run Code Online (Sandbox Code Playgroud)

错误:message ="缺少必需的PRIMARY KEY部分real_time

我尝试过创建二级索引,但主键上不允许这样做.

我怎么解决这个问题?

我选择user_id作为主键,因为我希望能够做到这一点select * from Notes where user_id = 'xxx'.

Aar*_*ron 12

虽然使用RDBMS和SQL可以实现这一点,但在Cassandra中使用cql是不可能的.从UPDATE命令的DataStax文档:

每个更新语句都需要使用WHERE子句指定一组精确的主键.您需要在具有复合和聚类列的表中指定所有键.

您可能需要在Python(或其他驱动程序之一)中快速编写一些内容来执行此类更新.

  • 虽然上面的答案是正确的,但我认为值得一提的是你可以使用`IN`子句作为主键的最后一列(即作者问题的`insertion_time`).根据您的使用情况,这对减少所需的CQL语句数量很有用. (6认同)