当前位置: 首页 > 知识库问答 >
问题:

CQL3更改主键

田向荣
2023-03-14
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';

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

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

共有1个答案

黎曾笑
2023-03-14

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

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并进行切换来完成此操作。如果这需要活着做,这更难,但仍然是可能的。

 类似资料:
  • 好的,所以我不确定这是否可能,但我需要更改一个表中的主键值,以匹配另一个表中的FK值。 我创建了一个表-POS_Transactions(FK REGISTER)并导入了它的值,然后创建了另一个表-Registers(pk Registers key)并导入了它的值。但是当我导入寄存器的值时,我遇到了一些问题,必须清除表并再次尝试多次(这就是为什么数字是从15到22的原因,它只是以这种方式自动更新

  • 问题内容: 我收到的时候我想改变我的以下异常中的。 我知道我要更改表中的主键。我正在使用JPA注释。 我通过使用以下单个HQL查询解决了此问题: 而不是使用更多的OO方法: 知道差异是什么吗? 问题答案: 我无法想象你为什么要这么做。完全没有 您为什么要更改实体的身份?您还需要更新指向它的其他表中的所有外键。似乎很痛苦,没有收获。您最好将其设置为“业务密钥”(普通属性),并使用更永久的代理密钥。我

  • 我的PostgreSQL数据库中有表,有两列:和。是主键,只是另一个具有唯一约束的整数列。 还有其他按主键引用用户的表。 下面是表说明: 以下是说明: 如何将PostgreSQL表中的主键从列替换为列,并保持数据完整性?

  • 但是我宁愿把所有东西都保存在我的Dropbox里,以便轻松备份。但是我也希望能够通过脚本的名字而不是整个路径来调用脚本。这个可以设置吗?

  • 有没有办法通过在容器的命令行中发送命令来重命名lxc容器主机名?我知道您可以执行类似于的操作,然后使用()重命名配置中的主机名和路径。 但是,我可以不离开容器的控制台,然后在主控制台中键入内容来完成它吗?

  • 我现有的汇流(5.8)空间有‘全球外观和感觉’的主题。我想将主题更改为“文档”主题。在为我的空间切换主题时有什么问题吗?我需要采取任何预防措施吗?