首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CQL3更改主键

CQL3更改主键
EN

Stack Overflow用户
提问于 2013-08-02 21:54:29
回答 1查看 276关注 0票数 2

假设我有一张下面的作文表。

代码语言:javascript
复制
CREATE TABLE rollup (
  hashname text,
  key text,
  day timestamp,
  counter_value counter,
  PRIMARY KEY (hashname, key, day)
) WITH
...

我想运行一个如下所示的查询

代码语言:javascript
复制
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)。我找不到任何文件来告诉我如何去做。有可能吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-04 10:32:38

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

代码语言:javascript
复制
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

因此,要检索一段时间,卡桑德拉需要“跳过”每个键。这是低效的,不受支持。你需要按这样的顺序排列:

代码语言:javascript
复制
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并切换。如果这需要生活,这是困难的,但仍然有可能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18026682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档