Cassandra更新主键值

16

我知道使用UPDATE命令无法实现此操作。

相反,我想做的是将所有主键为0的行迁移到新的主键为1的行。是否有简单的方法来实现这一点?

1个回答

16

如果你想要一个相对简单的方法,你可以在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:

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关于COPY的文档


谢谢你的回答。不幸的是,我的ID是组合主键的一部分,因此会重复(可能重复了数千次)。手动文本编辑更改是不可能的。是否可以使用COPY流式传输数据...更改主键...并使用一个工具将其流式传回? - greenimpala
3
任何司机都可以轻松地完成这个任务。对于一次性的操作,我可能会选择使用DataStax Python驱动程序。只需查询您想要的行,更改值并将它们写回表格即可。如果需要进一步解释,请告诉我,我可以在下面提供完整的答案。 - mildewey
@greenimpala Mildewey是正确的,你最好写一个快速的Python脚本来完成这个任务。 - Aaron
如果你有1000条记录呢? - Patrick Iradukunda

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