CASSANDRA CQL3:更改主键

时间:2015-08-05 12:53:43

标签: database cassandra cql cql3 cqlsh

目前,我有一个包含以下主键的表,其中包含10K行。

PRIMARY KEY ((deviceid, time), channelname)

我需要得到:

PRIMARY KEY (deviceid, time, channelname)

我在某个地方看到,我要重建整个桌子。那么你有一些方法/建议来导出我的行并将它们导入我的新表吗?

谢谢;)

2 个答案:

答案 0 :(得分:3)

  

我在某个地方看到了,我要重建整个桌子。

这是正确的。

  

那么你有一些方法/建议来导出我的行并将它们导入我的新表中吗?

是的,出于同样的原因,我必须在另一周做这件事。在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 docs

答案 1 :(得分:1)

只是为了扩展。 CQL语句CREATE TABLE中设置的主键包括分区键。在Cassandra中,分区键定义了数据将存储在哪个节点,因此无法更改或更改,因为现在数据将位于错误的节点上。在您的语句中,您将分区键从(deviceid,time)更改为deviceid,并生成不同的哈希来定义数据位置。

当然,在Cassandra中,如果您需要以不同的方式进行查询,则可以在两个表中包含数据。非规范化的乐趣!