假设我有一张下面的作文表。
CREATE TABLE rollup (
hashname text,
key text,
day timestamp,
counter_value counter,
PRIMARY KEY (hashname, key, day)
) WITH
...我想运行一个如下所示的查询
SELECT * FROM rollup WHERE hashname='some_namespaced_hash' AND day>='2013-07-15' AND day<='2013-07-25';但是,这不起作用,因为(我认为)下面的内容也与>、<等相关。
复合键意味着CQL在SELECT查询中按语法运行顺序也是有意义的,但它仍然不像您所习惯的那样灵活,在SQL中执行即席查询。ORDER子句只能选择单个列,该列必须是复合主键中的第二列。这甚至适用于主键中包含两个以上列组件的表。
在这里,day是主列键中的第三列。我认为唯一能做到这一点的方法是将主复合键更改为PRIMARY KEY (hashname, day, key)。我找不到任何文件来告诉我如何去做。有可能吗?
或者,我是否错过了解决这个问题的“正确”方法/我是否误解了这个问题?
发布于 2013-08-04 10:32:38
你说得对,唯一的办法就是转换主键的顺序。原因是,目前,您的密钥是按以下顺序排列的:
hashname1 key1 day1: counter_value111
hashname1 key1 day2: counter_value112
hashname1 key2 day1: counter_value121
hashname1 key2 day2: counter_value122
hashname1 key3 day1: counter_value131
hashname1 key3 day2: counter_value132因此,要检索一段时间,卡桑德拉需要“跳过”每个键。这是低效的,不受支持。你需要按这样的顺序排列:
hashname1 day1 key1: counter_value111
hashname1 day1 key2: counter_value121
hashname1 day1 key3: counter_value131
hashname1 day2 key1: counter_value112
hashname1 day2 key2: counter_value122
hashname1 day2 key3: counter_value132不幸的是,唯一的方法是重写所有的数据,而在Cassandra中没有一种内在的方法来做到这一点。您可以编写一个脚本来完成此操作,方法是从一个CF中读取数据,切换顺序,然后写入一个新的CF并切换。如果这需要生活,这是困难的,但仍然有可能。
https://stackoverflow.com/questions/18026682
复制相似问题