如何在Cassandra中更改PARTITION KEY列?

Кир*_*нко 5 cql cassandra cqlsh

假设我们有这样的表:

create table users (
    id text,
    roles set<text>,
    PRIMARY KEY ((id))
);
Run Code Online (Sandbox Code Playgroud)

我希望这个表的所有值都存储在同一个Cassandra节点上(好的,不是真的一样,相同的3,但是镜像了所有的数据,但是你明白了),所以为了实现我想要改变这个表是这样的:

create table users_v2 (
    partition int,
    id text,
    roles set<text>,
    PRIMARY KEY ((partition), id)
);
Run Code Online (Sandbox Code Playgroud)

如何在不丢失第一个表格的数据的情况下做到这一点?为了添加这样的列,ALTER TABLE似乎是不可能的.我很好.我尝试做的是从第一个表复制数据并插入第二个表.当我按原样执行时,分区列将丢失,这是预期的.我可以改变第一个表并在末尾添加一个"分区"列,然后以正确的顺序复制COPY,但是我无法更新第一个表中的所有行来设置所有的分区,而且似乎没有添加列时的"默认"值.

sam*_*sam 10

您根本无法更改Cassandra表的主键.您需要使用新架构创建另一个表并执行数据迁移.我建议您使用Spark,因为只需几行代码就可以很容易地在两个表之间进行迁移.

也是对主要关键问题的回答.

  • 事实上,我们通过csv进行了导出导入的数据迁移,所以看起来你的答案是唯一可行的方法.谢谢 (2认同)