如何更改Cassandra中的PARTITION KEY列?

时间:2015-08-18 09:37:23

标签: cassandra cql cqlsh

假设我们有这样的表:

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,但是我无法更新第一个表中的所有行来设置所有的分区,而且似乎没有添加列时的“默认”值。

2 个答案:

答案 0 :(得分:10)

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

This也回答了更改主键问题。

答案 1 :(得分:1)

如果表格中没有大量数据,则采用另一种方式。 在实用程序&#34; DataStax开发人员中心&#34;中,选择表并使用命令&#34;将所有结果导出为文件INSERT&#34;。它将使用Insert CQL指令保存表中的所有数据。

enter image description here

然后你应该删除表,使用新的PARTITION KEY创建一个新表,最后通过CQL通过文件中的指令填充它。