为什么我的Cassandra更新不起作用?

时间:2016-04-03 01:04:05

标签: 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"

除了在进行更新之前执行查询以查找起始值之外,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

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

如果你查看你的表结构,(id,start)combined会生成主键,其中id是分区键。

在cassandra中,更新和插入之间没有区别,但在任何一种情况下,您都需要拥有完整的主键,以便cassandra找到特定的行。

您需要使用以下任一方式进行更新。

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

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

答案 1 :(得分:0)

很简单,您也必须提供群集列值。 (您的PK为PRIMARY KEY (id, start),表示 id 为分区键,开始为群集列。

分区键和群集列都是主键的一部分,必须是唯一的。因此,如果您在WHERE子句中仅使用 id 进行更新,则它将不明确。

e.g。 PRIMARY KEY (year, month),如果您使用UPDATE table SET value="x" WHERE year=2016进行更新,cassandra将不知道您确实要更新哪一行。

因此,您需要在UPDATE中提供完整的PRIMARY KEY。 :)