1

キーとして文字列、クラスタリング列として timeuuid を持つテーブルがあります。

私がやりたいのは、に基づいて更新することですtimeuuid < now()

例:

UPDATE table SET is_used = true WHERE key1 = 'value' AND created_at < timeuuid('2016-02-03') IF is_used != true;

しかし、取得

InvalidRequest: code=2200 [Invalid query] message="Invalid operator < for PRIMARY KEY part created_at

そのための回避策または解決策はありますか?この場合、クラスタリング列が主キーと見なされるのはなぜですか?

ではごきげんよう

---- Update1: ---

Cassandra バージョン 2.2 を使用しています。スキーマは次のとおりです。

CREATE TABLE book (
created_at timeuuid,
book_type varchar,
book_title varchar
PRIMARY KEY ((book_type), created_at)) WITH CLUSTERING ORDER BY (book created_at DESC);
4

1 に答える 1

2

残念ながら、C* 3.5 であっても、クラスタリング列が範囲に制限されている UPDATE を実行できないようです。

私が言えることから、UPDATE を実行するときに主キー全体を指定する必要があるため、データの範囲には適用できません。

とにかく条件付き更新を行っているので、SELECT最初に変更する候補行を特定してから、バッチで更新を行うことができます (それらはすべて同じパーティションに適用されるため、これは問題ありません)。

于 2016-06-02T15:20:21.440 に答える