目前,我有一个包含以下主键的表,其中包含10K行。
PRIMARY KEY ((deviceid, time), channelname)
我需要得到:
PRIMARY KEY (deviceid, time, channelname)
我在某个地方看到,我要重建整个桌子。那么你有一些方法/建议来导出我的行并将它们导入我的新表吗?
谢谢;)
答案 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中,如果您需要以不同的方式进行查询,则可以在两个表中包含数据。非规范化的乐趣!