Mysql 如何将一个大表导出为50个较小的csv文件,每个文件包含100000条记录
我试图将一个字段从一个非常大的表(例如,包含5000000条记录)导出到一个csv列表中,但不是全部导出,而是将100000条记录导出到创建的每个.csv文件中,而不进行重复。请问我该怎么做 我试过了Mysql 如何将一个大表导出为50个较小的csv文件,每个文件包含100000条记录,mysql,export,limit,file-io,Mysql,Export,Limit,File Io,我试图将一个字段从一个非常大的表(例如,包含5000000条记录)导出到一个csv列表中,但不是全部导出,而是将100000条记录导出到创建的每个.csv文件中,而不进行重复。请问我该怎么做 我试过了 SELECT field_name FROM table_name WHERE certain_conditions_are_met INTO OUTFILE /tmp/name_of_export_file_for_first_100000_records.csv LI
SELECT field_name
FROM table_name
WHERE certain_conditions_are_met
INTO OUTFILE /tmp/name_of_export_file_for_first_100000_records.csv
LINES TERMINATED BY '\n'
LIMIT 0 , 100000
这给出了前100000条记录,但我所做的任何事情都没有将其他4900000条记录导出到49个其他文件中——我如何指定其他49个文件名
例如,我尝试了以下方法,但SQL语法错误:
SELECT field_name
FROM table_name
WHERE certain_conditions_are_met
INTO OUTFILE /home/user/Eddie/name_of_export_file_for_first_100000_records.csv
LINES TERMINATED BY '\n'
LIMIT 0 , 100000
INTO OUTFILE /home/user/Eddie/name_of_export_file_for_second_100000_records.csv
LINES TERMINATED BY '\n'
LIMIT 100001 , 200000
这并没有创建第二个文件
请问我做错了什么,有没有更好的方法?是否应在第一个INTO OUTFILE语句之前设置限制0,100000,然后对第二个100000条记录重复SELECT中的整个命令,以此类推
谢谢你的帮助
Eddie如果您运行的是类似UNIX的操作系统,为什么不选择全部并通过以下管道输出:
split --lines=100000
作为概念证明:
echo '1
2
3
4
5
6
7
8
9' | split --lines=3
创建三个文件xaa、xab和xac,分别包含第1、2、3、4、5、6和7、8、9行
或者,即使在其他操作系统上,您也可以使用GNU工具,如split所在的位置。如果您运行的是类似UNIX的操作系统,为什么不选择全部并通过以下管道输出:
split --lines=100000
作为概念证明:
echo '1
2
3
4
5
6
7
8
9' | split --lines=3
创建三个文件xaa、xab和xac,分别包含第1、2、3、4、5、6和7、8、9行
或者,即使在其他操作系统上,您也可以获得GNU工具,例如split所在的位置。您可以使用循环和子查询来生成文件。以下过程可以为您提供如何执行此操作的线索,它可能有语法错误:
CREATE PROCEDURE exportSplitter(partsCount)
BEGIN
SET rowCount = select count(*) from table;
SET pageRowCount = rowCount / partsCount;
SET p1 = 0;
label1: LOOP
SET p1 = p1 + 1;
SELECT field_name
FROM (SELECT * from table_name WHERE certain_conditions_are_met order by id LIMIT p1*pageRowCount) order by id desc LIMIT pageRowCount
INTO OUTFILE /home/user/Eddie/p1
LINES TERMINATED BY '\n'
IF p1 < partCount THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
END
您可以使用循环和子查询来生成文件。以下过程可以为您提供如何执行此操作的线索,它可能有语法错误:
CREATE PROCEDURE exportSplitter(partsCount)
BEGIN
SET rowCount = select count(*) from table;
SET pageRowCount = rowCount / partsCount;
SET p1 = 0;
label1: LOOP
SET p1 = p1 + 1;
SELECT field_name
FROM (SELECT * from table_name WHERE certain_conditions_are_met order by id LIMIT p1*pageRowCount) order by id desc LIMIT pageRowCount
INTO OUTFILE /home/user/Eddie/p1
LINES TERMINATED BY '\n'
IF p1 < partCount THEN ITERATE label1; END IF;
LEAVE label1;
END LOOP label1;
END