【问题标题】:Cassandra UPDATE primary key valueCassandra UPDATE 主键值
【发布时间】:2015-01-17 07:04:25
【问题描述】:

我了解使用 UPDATE 无法做到这一点。

我想做的是将所有 PK=0 的行迁移到 PK=1 的新行。有什么简单的方法可以实现吗?

【问题讨论】:

    标签: cassandra cql cqlsh


    【解决方案1】:

    对于一个相对简单的方法,你总是可以在 cqlsh 中做一个快速的COPY TO/FROM。

    假设我有一个名为“emp”的列族(表)用于员工。

    CREATE TABLE stackoverflow.emp (
        id int PRIMARY KEY,
        fname text,
        lname text,
        role text
    )
    

    为了这个例子的目的,我有一行。

    aploetz@cqlsh:stackoverflow> SELECT * FROM emp;
    
     id | fname | lname | role
    ----+-------+-------+-------------
      1 | Angel |   Pay | IT Engineer
    

    如果我想用新的 id 重新创建 Angel,我可以 COPY 表格的内容 TO 一个 .csv 文件:

    aploetz@cqlsh:stackoverflow> COPY stackoverflow.emp TO '/home/aploetz/emp.csv';
    
    1 rows exported in 0.036 seconds.
    

    现在,我将使用我最喜欢的编辑器在 emp.csv 中将 Angel 的 id 更改为 2。请注意,如果您的文件中有多行(不需要更新),这是您删除它们的机会:

    2,Angel,Pay,IT Engineer
    

    我将保存文件,然后将更新后的行COPY 回到 Cassandra FROM 文件中:

    aploetz@cqlsh:stackoverflow> COPY stackoverflow.emp FROM '/home/aploetz/emp.csv';
    
    1 rows imported in 0.038 seconds.
    

    现在 Angel 在“emp”表中有两行。

    aploetz@cqlsh:stackoverflow> SELECT * FROM emp;
    
     id | fname | lname | role
    ----+-------+-------+-------------
      1 | Angel |   Pay | IT Engineer
      2 | Angel |   Pay | IT Engineer
    
    (2 rows)
    

    更多信息,请查看DataStax doc on COPY

    【讨论】:

    • 感谢您的回答。不幸的是,我的 ID 是复合主键的一部分,因此被重复(可能数千次)。无法手动更改文本编辑器。是否可以使用 COPY 将数据流式传输...更改密钥...并使用一个工具将其流式传输回来?
    • 任何驱动程序都会让这变得相当容易。对于一次性我可能会选择 datastax python 驱动程序。只需查询您想要的行,更改值并将它们写回表中。如果您希望我对此进行扩展,请说出来,我将在下面给出完整的答案。
    • @greenimpala Mildewey 是对的,您可能更容易编写一个快速的 Python 脚本来完成此操作。
    • 如果你有 1000 条记录怎么办?
    猜你喜欢
    • 2017-06-15
    • 2021-10-09
    • 2015-02-01
    • 2015-10-28
    • 2016-04-08
    • 2020-01-13
    • 2023-03-31
    • 2014-07-02
    • 2017-11-07
    相关资源
    最近更新 更多