6

I want to use a Cassandra counters in CQL3 like this

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

I know that in order to update the counter I need to do something of the form:

update count1 set c1 = c1+1 where ..

but before this I need to insert a value in my key (id); but I get:

cqlsh:test2> insert into count1 (id) values (4);
Bad Request: INSERT statement are not allowed on counter tables, use UPDATE instead

what gives ?

4

1 回答 1

8

Cassandra 没有主键存在与否的概念 - 它只是具有某个主键的单元格。

因此,对于普通列族(即非计数器),您可以insertupdate(它们在语义上相同)无论之前是否使用该主键插入了任何内容。

至于计数器表,CQL 要求您使用update而不是insert,以明确它是递增而不是设置值。您不能在 Cassandra 中设置计数器值,只能设置 inc/dec。如果之前没有计数器,则假定其值为 0。因此您可以运行

update count1 set c1 = c1 + 1 where id = 2;

并且计数器的值为 1:

select * from count1;

 id | c1
----+----
  2 |  1
于 2013-07-18T08:43:00.500 回答