2016-04-03 39 views
3

我有以下卡桑德拉表:爲什麼我的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"

如何解決這個問題,除了在做更新之前查詢起始值?

回答

3

您的主鍵不完整,並且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'); 
0

很簡單,您也必須提供聚類列值。 (你的PK是PRIMARY KEY (id, start),這意味着ID是分區鍵和開始的聚類列。

兩個分區鍵和聚類列是主鍵的一部分,且必須是唯一的。所以,如果你只更新ID WHERE子句,它會曖昧。

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

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

相關問題