CASSANDRA CQL3:更改主键

3

目前,我有一张拥有10K行记录的表格,其中包含以下主键。

PRIMARY KEY ((deviceid, time), channelname)

我需要得到:

PRIMARY KEY (deviceid, time, channelname)

我看过一些资料,说要重新建立整个表。你有什么方法或建议可以将我的行导出并导入到新表中吗?

谢谢;)

2个回答

4
我看到有人说我需要重建整个表格,这是正确的。如果你想要将现有行导出并导入到新表中,你可以在cqlsh中使用COPY实用程序。为了导出现有的shipcrewregistry表,你可以使用 COPY TO:
aploetz@cqlsh:presentation> COPY shipcrewregistry (shipname , lastname , firstname , 
    citizenid , aliases) TO '/home/aploetz/shipcrewreg_20150805.txt' 
    WITH HEADER=true AND DELIMITER='|';

9 rows exported in 0.026 seconds.

一旦我删除并重新创建表格,想要导入数据的话,可以使用COPY FROM命令:

aploetz@cqlsh:presentation> COPY shipcrewregistry (shipname , lastname , firstname ,
    citizenid , aliases) FROM '/home/aploetz/shipcrewreg_20150805.txt' 
    WITH HEADER=true AND DELIMITER='|';

9 rows imported in 0.636 seconds.

如果您想了解COPY更多的信息,请查看DataStax文档


非常感谢,我明天会执行这个操作 :) - Quentin DESBOIS

1
仅作扩展。在CQL语句CREATE TABLE中设置的主键包括分区键。在Cassandra中,分区键定义了数据将存储在哪个节点上,因此它不能被更改或修改,否则数据将存储在错误的节点上。在您的语句中,您将分区键从(deviceid,time)更改为deviceid,这将生成不同的哈希来定义数据位置。
当然,在Cassandra中,如果需要以不同方式查询,则可以在两个表中都存储数据。非规范化的乐趣!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接