cassandra - 如何更改 Cassandra 中的 PARTITION KEY 列?

标签 cassandra cql cqlsh

假设我们有这样的表:

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/

相关文章:

Cassandra - CQLSH 中发出的每个命令都会抛出错误

sql - 根据 id 匹配时另一个表中的值更新表中的列

Cassandra 没有启动

Cassandra 日志显示 "Writing large partition *** to sstable"WARN,即使在删除它们之后也是如此

Cassandra CLUSTERING ORDER BY 不起作用并显示正确的结果

Cassandra 超时?

cassandra - Spark-streaming:如何将流数据输出到cassandra

cassandra - HIVE/HDFS 用于大规模实时存储传感器数据?

cassandra - 更改复合主键的顺序

cassandra - cassandra 在同时执行两个并行创建键空间命令时会失败吗