CQL3 コンソールでテーブルを作成しました (単一の主キー構成要素は一意ではありません。一緒にすると一意になります)。
CREATE TABLE aggregate_logs (
bpid varchar,
jid int,
month int,
year int,
value counter,
PRIMARY KEY (bpid, jid, month, year));
次に、次を使用して更新およびクエリを実行できました。
UPDATE aggregate_logs SET value = value + 1 WHERE bpid='1' and jid=1 and month=1 and year=2000;
これは期待どおりに機能します。Hector (Scala) で同じ更新を行いたかった:
val aggregateMutator:Mutator[Composite] = HFactory.createMutator(keyspace, compositeSerializer)
val compKey = new Composite()
compKey.addComponent(bpid, stringSerializer)
compKey.addComponent(new Integer(jid), intSerializer)
compKey.addComponent(new Integer(month), intSerializer)
compKey.addComponent(new Integer(year), intSerializer)
aggregateMutator.incrementCounter(compKey, LogsAggregateFamily, "value", 1)
しかし、次のメッセージでエラーが発生します。
...HInvalidRequestException: InvalidRequestException(why:String didn't validate.)
次のコマンドを使用して、hector から直接クエリを実行します。
val query = new me.prettyprint.cassandra.model.CqlQuery(keyspace, compositeSerializer, stringSerializer, new IntegerSerializer())
query.setQuery("UPDATE aggregate_logs SET value = value + 1 WHERE 'bpid'=1 and jid=1 and month=1 and year=2000")
query.execute()
エラーが表示されます:
InvalidRequestException(why:line 1:59 mismatched input 'and' expecting EOF)
複合主キーの下でカウンターを使用する例は他にないようです。それは可能ですか?