为什么我的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。 :)