我有一个带列
的宽行表 page_id int, user_id int, session_tid timeuuid and end_time timestamp
分区键= user_id
我需要在表上进行多个查询,一些基于一列,一些基于另一列 - 事实证明我的每个列都有where
子句
由于Cassandra不允许我在非索引的非键列上使用where
子句,如果我将所有列都用作复合键,是否可以? (目前除end_time
列以外的所有列都是复合键,user_id
作为分区键)
答案 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, 卡罗