Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Cassandra中更改分区键列?_Cassandra_Cql_Cqlsh - Fatal编程技术网

如何在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进行了数据迁移,通过导出导入,所以您的答案似乎是唯一可行的方法。谢谢