Mysql 如何将一个大表导出为50个较小的csv文件,每个文件包含100000条记录

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

我试图将一个字段从一个非常大的表(例如,包含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
        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