0
votes

I have a wide row table with column

page_id int, user_id int, session_tid timeuuid and end_time timestamp

with partition key = user_id

I need to do multiple queries on the table, some based on one column and some based on another - and it turns out that I have cases with where clause on every column

As Cassandra doesnt allow me to use where clause on non-indexed, non-key column, is it ok if I make all of the columns my composite key? (currently all but end_time column are already composite key, with user_id as the partition key)

1

1 Answers

3
votes

Making all columns as part of the primary key will not allow you to perform where conditions to each column in the way you're thinking.

To make an easy example if you create such a primary key

PK(key1, key2, key3, key4)

you won't be able to perform a query like

select * from mytable where key2 = 'xyz';

Because the rule is that you have to follow the order of keys to create a "multiple-where" condition.

So valid queries with multiple where are the following:

select * from mytable where key1 = 'xyz' and key2 = 'abc';
select * from mytable where key1 = 'xyz' and key2 = 'abc' and key3 = 11;
select * from mytable where key2 = 'xyz' and key2 = 'abc' and key3 = 11 and key4 = 2014;

You can ask for keyN only providing keyN-1

HTH, Carlo