我有像这样的复合键的columnfamily
CREATE TABLE sometable(
keya varchar,
keyb varchar,
keyc varchar,
keyd varchar,
value int,
date timestamp,
PRIMARY KEY (keya,keyb,keyc,keyd,date)
);
我需要做的是
SELECT * FROM sometable
WHERE
keya = 'abc' AND
keyb = 'def' AND
date < '2014-01-01'
这就是给我这个错误
Bad Request: PRIMARY KEY part date cannot be restricted (preceding part keyd is either not restricted or by a non-EQ relation)
解决这个问题的最佳方法是什么?我需要改变我的专栏吗? 我还需要使用所有keya,keyb, keyc 和日期查询这些表。
答案 0 :(得分:0)
你不能在cassandra中做到这一点。而且,这种范围切片也是更昂贵的。您正试图根据您的架构切换一组优先级较低的等值。
我还需要使用所有keya,keyb,keyc和date来查询这些表。
如果您正在考虑解决此问题,请考虑使用此架构。我建议的是将密钥放在单独的模式中
创建表格( timeuuid id, keyType文本, 主键(timeuuid,keyType))
使用timeuuid存储值并根据该值进行范围扫描。
创建表格( timeuuid prevTableId, 值int, 日期时间戳, 主键(prevTableId,date))
猜测,通过这种方式,您的表被规范化以便在您的用例中获得更好的可伸缩性,并且如果密钥也是重复的,则可以节省大量磁盘空间。