我想在CQL3中使用像这样的Cassandra计数器
create table count1(id int PRIMARY KEY,c1 counter);
我知道为了更新计数器,我需要做一些表格:
更新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
是什么给了什么?
答案 0 :(得分:7)
Cassandra没有主键存在或不存在的概念 - 它只是存在某个主键的单元格。
因此,对于普通列族(即非计数器),无论先前是否使用该主键插入了任何内容,您都可以insert
或update
(它们在语义上相同)。
对于计数器表,CQL要求您使用update
而不是insert
,以明确它是递增而不是设置值。您不能在Cassandra中设置计数器值,只能在inc / dec中设置。如果没有先前的计数器,则假定其值为0.因此您可以运行
update count1 set c1 = c1 + 1 where id = 2;
并且计数器的值为1:
select * from count1;
id | c1
----+----
2 | 1