我在表中有 2 列的条目不正确。表的大小达到数十亿条记录。我想在两列(c1 和 C2)之间交换数据所采用的方法是将数据以小块的形式导出到 CSV 文件中,然后使用更正的条目将其导入回来。例如,下面是数据集
--------
|C1 | C2 |
|3 | 4 |
|4 | 6 |
然后,我会将数据导出到以分号分隔的 CSV 文件(未显示完整命令),如下所示
SELECT C2,C1 FROM TABLE temp INTO OUTFILE /tmp/test.csv
此类命令的输出将是
4;3
6;4
当我导入数据时(删除有问题的数据后),数据将被更正如下
| C1 C2 |
| 3 4 |
| 4 6 |
确实是OUTFILE和INFILE操作的问题,我相信
问题
- 这种方法有意义吗?除了数据交换之外,实际数据还需要某些列中的 NULL、int 值。
- 另一个复杂性是在生产数据库中,我需要使用WHERE子句。表名也将被动态获取。
- 参考第 2 点,我如何为查询添加动态性。我应该使用 STORED 过程还是 SHELL SCRIPT?STORED 过程似乎不支持 LOAD DATA INFILE 功能。
- 如果我剩下 shell,我可以重用任何示例脚本吗?CSV 文件名、表名和 WHERE 子句必须在运行时构建。
- 此外,将动态计算要导出和导入的块的大小。
- 还有其他方法吗?
注意 - 这是一个基于 mysql 的 INFOBRIGHT 列的表。UPDATE 查询是非执行的,并且 INFOBRIGHT 不支持 ALTER TABLE。