如何在Cassandra中更改分区键列?
假设我们有这样的表:如何在Cassandra中更改分区键列?,cassandra,cql,cqlsh,Cassandra,Cql,Cqlsh,假设我们有这样的表: create table users ( id text, roles set<text>, PRIMARY KEY ((id)) ); 创建表用户( id文本, 角色集, 主键((id)) ); 我希望该表的所有值都存储在同一个Cassandra节点上(好的,不是真的相同,相同的3,但镜像了所有数据,但你明白了),因此为了实现这一点,我希望将该表更改为如下所示: create table users_v2 ( partiti
create table users (
id text,
roles set<text>,
PRIMARY KEY ((id))
);
创建表用户(
id文本,
角色集,
主键((id))
);
我希望该表的所有值都存储在同一个Cassandra节点上(好的,不是真的相同,相同的3,但镜像了所有数据,但你明白了),因此为了实现这一点,我希望将该表更改为如下所示:
create table users_v2 (
partition int,
id text,
roles set<text>,
PRIMARY KEY ((partition), id)
);
创建表用户\u v2(
分区int,
id文本,
角色集,
主键((分区),id)
);
如何在不丢失第一个表中的数据的情况下执行此操作?
为了添加这样的列,似乎不可能修改表。我同意。
我试图做的是从第一个表复制数据并插入到第二个表中。
当我照原样做时,分区列і丢失了,这是意料之中的。
我可以更改第一个表并在末尾添加一个“partition”列,然后按正确的顺序复制,但我不能更新第一个表中的所有行以设置所有部分的分区,而且在添加列时它似乎没有“default”值。您根本无法更改Cassandra表的主键。您需要使用新模式创建另一个表并执行数据迁移。我建议您使用Spark,因为只需几行代码就可以很容易地在两个表之间进行迁移
同时回答alter主键问题。如果表中的数据不多,还有另一种方法。 在实用程序“DataStax开发中心”中,选择表并使用命令“将所有结果导出到文件作为插入”。它将使用Insert CQL指令将表中的所有数据保存到文件中
然后你们应该删除这个表,用新的分区键创建一个新的表,最后通过CQL文件中的指令来填充它。是的,这就是我所说的“为了添加这样的列而改变表似乎是不可能的。”我将试着找到一些解决方法。谢谢你的建议。我将等待更多的答案,也许有人知道如何以最少的努力完成smth。事实上,我们通过csv进行了数据迁移,通过导出导入,所以您的答案似乎是唯一可行的方法。谢谢