假设我们有这样的表:
create table users (
id text,
roles set<text>,
PRIMARY KEY ((id))
);
我希望这个表的所有值都存储在同一个Cassandra节点上(OK,不是真的相同,相同的3,但是镜像了所有数据,但是你明白了),所以要实现我想要的将此表更改为:
create table users_v2 (
partition int,
id text,
roles set<text>,
PRIMARY KEY ((partition), id)
);
如何在不丢失第一张表中的数据的情况下执行此操作? 为了添加这样的列,ALTER TABLE似乎是不可能的。我很好。 我尝试做的是从第一个表复制数据并插入第二个表。 当我按原样执行时,分区列将丢失,这是预期的。 我可以改变第一个表并在末尾添加一个“分区”列,然后以正确的顺序复制COPY,但是我无法更新第一个表中的所有行来设置所有的分区,而且似乎没有添加列时的“默认”值。
答案 0 :(得分:10)
您根本无法更改Cassandra表的主键。您需要使用新架构创建另一个表并执行数据迁移。我建议您使用Spark,因为只需几行代码就可以很容易地在两个表之间进行迁移。
This也回答了更改主键问题。
答案 1 :(得分:1)