假设我们有这样的表:
create table users (
id text,
roles set<text>,
PRIMARY KEY ((id))
);
我希望这个表的所有值都存储在同一个 Cassandra 节点上(好吧,不是真的相同,相同的 3,但所有数据都被镜像,但你明白了),所以为了实现这一点,我想改变这个表是这样的:
create table users_v2 (
partition int,
id text,
roles set<text>,
PRIMARY KEY ((partition), id)
);
我怎样才能在不丢失第一个表中的数据的情况下做到这一点?
为了添加这样的列,ALTER TABLE 似乎是不可能的。我没问题。
我尝试做的是从第一个表中复制数据并插入到第二个表中。
当我这样做时,分区列丢失了,这是意料之中的。
我可以更改第一个表并在最后添加一个“分区”列,然后以正确的顺序 COPY,但我无法更新第一个表中的所有行以设置所有分区,并且似乎没有添加列时的“默认”值。
最佳答案
您根本无法更改 Cassandra 表的主键。您需要使用新架构创建另一个表并执行数据迁移。我建议您为此使用 Spark,因为只需几行代码就可以轻松地在两个表之间进行迁移。
This还回答了改变主键的问题。
关于cassandra - 如何更改 Cassandra 中的 PARTITION KEY 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32068765/