CQL 3中的Cassandra 1.2计数器:如何插入主键?

6
我希望在CQL3中使用Cassandra计数器,就像这样:

create table count1 (id int PRIMARY KEY , c1 counter );

我知道为了更新计数器,我需要执行以下操作:

update count1 set c1 = c1+1 where ..

但在此之前,我需要在我的key (id)中插入一个值,但我得到了以下错误提示:
cqlsh:test2> insert into count1 (id) values (4);
Bad Request: INSERT statement are not allowed on counter tables, use UPDATE instead

什么情况?
1个回答

8
卡桑德拉没有主键存在或不存在的概念 - 只有使用特定主键存在的单元格。因此,对于普通列族(即非计数器),您可以无论之前是否已插入具有该主键的任何内容都可以执行insertupdate(它们在语义上是相同的)。对于计数表,CQL 要求您使用 update 而不是 insert,以明确其增量而不是设置值。在卡桑德拉中,您不能设置计数器值,只能进行增加/减少操作。如果没有先前的计数器,则假定其值为0。因此,您可以运行以下操作:
update count1 set c1 = c1 + 1 where id = 2;

计数器将会有值1:

select * from count1;

 id | c1
----+----
  2 |  1

谢谢Richard,我明白了,所以我必须使用任意ID更新计数器表才能使其工作。有点奇怪,但这样可以 - 谢谢。 - matthieu lieber
这是用于检索计数器的ID。您可以在列族中拥有任意多个计数器。 - Richard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接