Sorting CQL3更改主键

Sorting CQL3更改主键,sorting,cassandra,cql3,compound-key,cqlsh,Sorting,Cassandra,Cql3,Compound Key,Cqlsh,假设我有一张如下组成的表格 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

假设我有一张如下组成的表格

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';

SELECT*FROM rollup,其中hashname='some\u namespaced\u hash'和day>='2013-07-15'和day您是对的,唯一的方法是切换主键的顺序。原因是,目前,您的密钥按以下顺序排列:

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需要为每个键“跳过”。这是低效的,不受支持。您需要按以下顺序安装:

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并切换。如果这需要在现场进行,则难度更大,但仍有可能