【问题标题】:CASSANDRA CQL3 : Change primary keyCASSANDRA CQL3:更改主键
【发布时间】:2015-10-28 06:23:27
【问题描述】:

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

PRIMARY KEY ((deviceid, time), channelname)

我需要得到:

PRIMARY KEY (deviceid, time, channelname)

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

谢谢;)

【问题讨论】:

    标签: database cassandra cql cql3 cqlsh


    【解决方案1】:

    我在某处看到,我必须重建我的整张桌子。

    没错。

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

    是的,出于完全相同的原因,我不得不在前一周这样做。在 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

    【讨论】:

    • 非常感谢,我明天做这个手术:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-04
      • 2023-03-31
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 2013-08-27
      • 2013-09-05
      • 2013-07-14
      • 2014-04-04
      相关资源
      最近更新 更多