我有几个表要从一个Cassandra集群复制到另一个表;我认为最简单的方法是运行一系列shell命令,例如:
cqlsh -e“将header.true的keyspace.table1复制到'table1.csv';
(然后是一系列反向shell命令以复制到新集群中)。
但是,当我运行它时,我看到:
使用11个子进程
从[column1,column2,column3,column4]列开始复制keyspace.table1。
但是该过程会永远挂起,永远不会添加到目标CSV文件中。
答案 0 :(得分:0)
使用对表进行快照可能更有效
nodetool snapshot -cf <table_name> -t <snpashot_id> <keyspace>
其中键空间和表名称是您的结构的名称; snapshot_id将是一个标签,可帮助您识别快照。
您将很容易用nodetool listsnapshots
验证快照,然后按照here中说明的过程进行还原。
完成该过程后,您需要使用nodetool clearsnapshot <snapshot_id>
答案 1 :(得分:0)
您要复制的表中的行数是多少,每行的大小是多少?如果行和行数都很大,则使用COPY并不是最佳选择。
您可以尝试的一种选择是减小批量大小。
cqlsh -e "copy table keyspace.table1 to 'table1.csv' with header = true AND MAXBATCHSIZE=5;
这可能需要更长的时间,但是肯定会结束。我曾经遇到过类似的问题,该表具有近3000万条记录,并减少了批处理量。