Cassandra UPDATE主键值

gre*_*ala 14 cql cassandra cqlsh

我知道使用UPDATE是不可能的.

我想要做的是将所有行,例如PK = 0迁移到PK = 1的新行.有没有简单的方法来实现这一目标?

Aar*_*ron 18

对于一种相对简单的方法,您总是可以COPY在cqlsh中快速进行TO/FROM.

假设我有一个名为"emp"的列族(表)用于员工.

CREATE TABLE stackoverflow.emp (
    id int PRIMARY KEY,
    fname text,
    lname text,
    role text
)
Run Code Online (Sandbox Code Playgroud)

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

aploetz@cqlsh:stackoverflow> SELECT * FROM emp;

 id | fname | lname | role
----+-------+-------+-------------
  1 | Angel |   Pay | IT Engineer
Run Code Online (Sandbox Code Playgroud)

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

aploetz@cqlsh:stackoverflow> COPY stackoverflow.emp TO '/home/aploetz/emp.csv';

1 rows exported in 0.036 seconds.
Run Code Online (Sandbox Code Playgroud)

现在,我将使用我最喜欢的编辑器在emp.csv中将Angel的id更改为2.请注意,如果文件中有多行(不需要更新),则可以将其删除:

2,Angel,Pay,IT Engineer
Run Code Online (Sandbox Code Playgroud)

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

aploetz@cqlsh:stackoverflow> COPY stackoverflow.emp FROM '/home/aploetz/emp.csv';

1 rows imported in 0.038 seconds.
Run Code Online (Sandbox Code Playgroud)

现在Angel在"emp"表中有两行.

aploetz@cqlsh:stackoverflow> SELECT * FROM emp;

 id | fname | lname | role
----+-------+-------+-------------
  1 | Angel |   Pay | IT Engineer
  2 | Angel |   Pay | IT Engineer

(2 rows)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看COPY上的DataStax文档.

  • 任何司机都会相当容易.对于一次性我可能会选择datastax python驱动程序.只需查询所需的行,更改值并将其写回表中.如果你想让我扩展,请说明,我将在下面做一个完整的答案. (3认同)