【问题标题】:How to change PARTITION KEY column in Cassandra?如何更改 Cassandra 中的 PARTITION KEY 列?
【发布时间】:2015-11-11 04:11:49
【问题描述】:

假设我们有这样的表:

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。我同意。 我尝试做的是从第一个表中复制数据并插入到第二个表中。 当我按原样执行时,分区列丢失,这是预期的。 我可以更改第一个表并在末尾添加一个“分区”列,然后以正确的顺序复制,但我无法更新第一个表中的所有行来设置所有分区,而且似乎没有添加列时的“默认”值。

【问题讨论】:

    标签: cassandra cql cqlsh


    【解决方案1】:

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

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

    【讨论】:

    • 是的,这就是我所说的“似乎不可能通过 ALTER TABLE 来添加这样的列”。我会尝试找到一些解决方法。感谢 Spark 的建议。我会等待更多的答案,也许有人知道如何以最少的努力做到这一点。
    • 事实上,我们通过 csv 进行了导出-导入的数据迁移,所以看起来你的答案是唯一可行的方法。谢谢
    【解决方案2】:

    如果表格中的数据不多,还有另一种方法。 在实用程序“DataStax Dev Center”中,选择表并使用命令“将所有结果导出到文件作为 INSERT”。它将使用插入 CQL 指令将所有数据从表保存到文件。

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

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      相关资源
      最近更新 更多