我有一个列族与主键定义是这样的:卡桑德拉CQL - 聚类以便与多个聚类列
...
PRIMARY KEY ((website_id, item_id), user_id, date)
这将使用查询诸如被查询:
SELECT * FROM myCF
WHERE website_id = 30 AND item_id = 10
AND user_id = 0 AND date > 'some_date' ;
然而,我'd想保留我的专栏仅按日期排序,如SELECT date FROM myCF ;
将返回最近插入的日期。
由于聚类列的顺序,我得到的是每个user_id然后每个日期的订单。 如果我改变主键定义:
PRIMARY KEY ((website_id, item_id), date, user_id)
我不能再运行相同的查询,如日期必须限制为user_id是。
我想可能有一些方式来表达:
...
PRIMARY KEY ((website_id, shop_id), store_id, date)
) WITH CLUSTERING ORDER BY (store_id RANDOMPLEASE, date DESC) ;
但它似乎并不存在。最糟糕的是,也许这完全是愚蠢的,我不明白为什么。
有什么办法可以达到这个目的吗?我错过了什么吗?
非常感谢!
感谢您的回答@RussS。第二种格式:'PRIMARY KEY((website_id,item_id),date,user_id)'阻止我使用过滤器:'AND user_id = 0 AND date>'some_date';'由于日期在user_id之前并且受到非EQ方程。 现在没有user_id作为分区列的第二个解决方案阻止我拥有每个用户数据,因为unicity受三元组(site_id,item_id,date)约束。 我错了吗? – kevad
不,你只需要使用*两个*表。在写入时插入两者。 即你需要为这些查询格式的每一个表格 – RussS
好吧,我明白你的意思。感谢您的回答,并感谢您的澄清! – kevad