Cassandra宽行与每列作为复合键

时间:2014-11-01 19:50:03

标签: cassandra key row composite

我有一个带列

的宽行表

page_id int, user_id int, session_tid timeuuid and end_time timestamp

分区键= user_id

我需要在表上进行多个查询,一些基于一列,一些基于另一列 - 事实证明我的每个列都有where子句

由于Cassandra不允许我在非索引的非键列上使用where子句,如果我将所有列都用作复合键,是否可以? (目前除end_time列以外的所有列都是复合键,user_id作为分区键)

1 个答案:

答案 0 :(得分:3)

将所有列作为主键的一部分,不允许您按照您的思维方式对每列执行where条件。

如果您创建了这样的主键,请举例说明

PK(key1, key2, key3, key4)

不会能够执行类似

的查询
select * from mytable where key2 = 'xyz';

因为规则是您必须按照键的顺序来创建“多地点”条件。

所以多个where的有效查询如下:

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;

您可以要求keyN仅提供keyN-1

HTH, 卡罗