matthieu lieber
matthieu lieber

Reputation: 662

CQL 3 Cassandra 1.2 counter: how to insert primary key?

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 ?

Upvotes: 6

Views: 4681

Answers (1)

Richard
Richard

Reputation: 11110

Cassandra doesn't have a concept of a primary key existing or not - it is only the cells that exist with a certain primary key.

So for normal column families (i.e. non-counter) you can insert or update (they are semantically identical) whether or not anything was previously inserted with that primary key.

As for counter tables, CQL requires you to use update rather than insert, to be clear that it is incrementing rather than setting the value. You cannot set a counter value in Cassandra, only inc/dec. If there was no previous counter, it is assumed to have value 0. So you can run

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

and the counter will have value 1:

select * from count1;

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

Upvotes: 8

Related Questions