如何更改 Cassandra 中的 PARTITION KEY 列?

How to change PARTITION KEY column in Cassandra?

假设我们有这样的table:

create table users (
    id text,
    roles set<text>,
    PRIMARY KEY ((id))
);

我希望这个 table 的所有值都存储在同一个 Cassandra 节点上(好吧,不完全一样,相同的 3,但所有数据都已镜像,但你明白了),所以为了实现我想把这个 table 改成这样:

create table users_v2 (
    partition int,
    id text,
    roles set<text>,
    PRIMARY KEY ((partition), id)
);

我怎样才能在不丢失第一个 table 的数据的情况下做到这一点? 似乎不可能通过 ALTER TABLE 来添加这样的列。我同意。 我尝试做的是从第一个 table 复制数据并插入到第二个 table。 当我按原样执行时,分区列丢失,这是预期的。 我可以更改第一个 table 并在末尾添加一个 'partition' 列,然后以正确的顺序复制,但我无法更新第一个 table 中的所有行来设置所有一些分区,添加列时似乎没有 "default" 值。

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

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

如果 table 中的数据不多,还有 另一种方法 。 在实用程序 "DataStax Dev Center"、select table 中并使用命令 "Export All result to file as INSERT"。它将使用插入 CQL 指令将 table 中的所有数据保存到文件中。

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