我想使用以下代码更新字段...
@@db.execute("UPDATE user_count SET counters = counters + #{val} WHERE cid = 1 ")
我第一次尝试,我得到了以下失败:
CassandraCQL :: Error :: InvalidRequestException:非交换columnfamily user_count的无效操作
我发现我必须使用比较器计数器,但我无法找到我如何使用cassandra-cql gem设置它...有谁知道我怎么能让它工作?
下面有我的代码不起作用......
@@db.execute("CREATE COLUMNFAMILY user_count(cid varchar PRIMARY KEY, counters counter) with comparator = counter " )
@@db.execute("INSERT INTO user_count (cid, counters) VALUES (?,?)", 1, 0)
答案 0 :(得分:2)
您需要设置default_validation = CounterColumnType而不是比较器。
@@db.execute("CREATE COLUMNFAMILY user_count(cid varchar PRIMARY KEY, counters counter) with default_validation=CounterColumnType")
@@db.execute("update user_count set counters = counters + 1 where cid = 1")
您必须使用'update'来更改计数器值,没有计数器的插入语法(在CQL更新和插入中执行相同的操作,因此您可以create new rows using update)。
目前,您不能在同一列系列中拥有计数器和非计数器(来自wiki:“列族仅包含计数器,或者根本不包含计数器。”)