0

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)

複合主キーの下でカウンターを使用する例は他にないようです。それは可能ですか?

4

2 に答える 2

0

CQL3 と Thrift API には互換性がありません。そのため、CQL3 で列ファミリーを作成し、Hector または別の倹約ベースのクライアントでそれにアクセスすることはできません。詳細については、次を参照してください。

https://issues.apache.org/jira/browse/CASSANDRA-4377

于 2012-10-18T15:19:41.493 に答える
0

直接cqlを使用することは間違いなく可能です(少なくともCQLSHとC ++の両方を介して):

cqlsh:goh_master> テーブル Daily_caps を記述します。
CREATE TABLE daily_caps ( caps_type ascii, id ascii, value counter, PRIMARY KEY (caps_type, id) ) WITH COMPACT STORAGE AND comment='' AND
caching='KEYS_ONLY' AND read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND replica_on_write='true' AND
Compaction_strategy_class='SizeTieredCompactionStrategy' AND
compression_parameters:sstable_compression='SnappyCompressor';

cqlsh:goh_master> update daily_caps set value=value +1 where caps_type='xp' and id ='myid';

cqlsh:goh_master> Daily_caps から * を選択します。

caps_type | ID | 価値

-----------+------+-------

xp | ミード | 1

于 2012-10-18T06:09:59.700 に答える