我正在尝试将一个字段从一个非常大的表(例如,包含5,000,000条记录)导出到一个csv列表中 - 但不是全部,而是创建每个.csv文件中的100,000条记录 - 没有重复。我该怎么办呢?
我试过
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条记录,但我没有把其他4,900,000条记录导出到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语句之前放置LIMIT 0,100000,然后从SELECT为第二个100,000条记录重复整个命令等?
感谢您的帮助。
埃迪
答案 0 :(得分:3)
如果您在类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
。
答案 1 :(得分:3)
您可以使用循环和子查询来生成文件。以下过程可以为您提供如何做到的线索(它可能有语法错误):
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