2016-04-03 16 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)combinedがプライマリキーとなります。そのうちのidはパーティションキーです。

更新と挿入の違いはありませんが、どちらの場合でも、特定の行を見つけるために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は、IDは、パーティション・キーで、列をクラスタ化されたを開始つまり、PRIMARY KEY (id, start)です。

は、パーティション・キーおよびクラスタリングの列の両方が主キーの一部であり、独自の必要があります。だから、あなただけを更新した場合ID句、それが曖昧になります。

例えばPRIMARY KEY (year, month)、あなたはUPDATE table SET value="x" WHERE year=2016で更新した場合、カサンドラはあなたが本当に更新をしたいされている行を知ることができませんインチ

だから、あなたは完全なPRIMARを提供する必要がありますあなたのUPDATEのY KEY。 :)

関連する問題