CQL3更改主键



假设我有一个由以下组成的表。

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查询中使用ORDER BY语法,但它仍然不如您习惯的那样灵活,在SQL中执行特殊查询。ORDER BY子句只能选择一列,并且该列必须是组合PRIMARY KEY中的第二列。这甚至适用于主键中包含2个以上列组件的表

这里day是主列关键字中的第三列。我唯一能想到的方法是将主复合键更改为PRIMARY KEY (hashname, day, key)。我找不到任何告诉我如何做到这一点的文档。有可能吗?

或者,我是否错过了解决这个问题的"正确"方法/我是否误解了这个问题?

你是对的,唯一的方法就是切换主键的顺序。原因是,目前,您的密钥按以下顺序排列:

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

因此,为了检索一系列天数,Cassandra需要"跳过"每个键。这是低效且不受支持的。你需要按以下顺序排列:

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并切换。如果这需要现场完成,那就更难了,但仍然有可能。

最新更新