为什么我的Cassandra更新没有工作?

问题描述:

我有以下卡桑德拉表:为什么我的Cassandra更新没有工作?

create table start_stop (id text, start text, end text, price double, PRIMARY KEY (id, start));

我做一个插入这样的:

insert into start_stop (id, start) values ('123', 'w');

现在我想要做一个更新:

update start_stop set end = 'z' where id = '123';

,我得到一个错误: InvalidRequest: code=2200 [Invalid query] message="Some clustering keys are missing: start"

如何解决这个问题,除了在做更新之前查询起始值?

您的主键不完整,并且cassandra只能在主键匹配时更新行。

如果你看看你的表结构,(id,start)组合成主键,其中id是分区键。

在cassandra中,update和insert没有区别,但无论哪种情况,您都需要有完整的主键,以便cassandra找到特定的行。

您需要使用下面的任一项来更新。

update start_stop set end = 'z' where id = '123' and start='w'; 

insert into start_stop (id, start, end) values ('123', 'w', 'z'); 

很简单,您也必须提供聚类列值。 (你的PK是PRIMARY KEY (id, start),这意味着ID是分区键和开始的聚类列。

两个分区键和聚类列是主键的一部分,且必须是唯一的。所以,如果你只更新ID WHERE子句,它会暧昧。

PRIMARY KEY (year, month),如果你有UPDATE table SET value="x" WHERE year=2016更新,卡桑德拉不知道你是哪个行真的想这样做更新。

所以,您需要提供完整的PRIMAR您的更新中的Y KEY。 :)