将大型csv文件导入到MySQL

7

我正在尝试将一个大小为300MB的csv文件导入到MySQL表中。我使用了以下命令:

LOAD DATA INFILE 'c:/csv/bigCSV.csv' IGNORE 
INTO TABLE table
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES

对于小文件(1兆字节等)它表现得很好,但是当我尝试加载像上面提到的大文件时,MySql Workbench(我用来执行查询的工具)运行了命令,一切都正确,显示为绿色,但是没有影响到任何行。表格中完全没有更改。

我非常确定表格没有问题,因为当我取出那个文件的一部分,例如1兆字节,并将其加载到同一张表中时,它可以正常工作。

有人遇到过类似的问题吗?

谢谢。


日志里有什么信息吗?是服务器端的问题还是客户端的问题?你可能遇到了超时问题,为了确定,我需要看一下日志。 - Jorge Campos
尝试使用MySQL命令行。 - wchiquito
@Mihai,是的,我只是把那个作为参考,我的表在服务器上叫做test1。 - Adrian Ivasku
@wchiquito - 从MySql 5.6命令行客户端中,我得到了ERROR 1046 <3D000>: No database selected。这很奇怪。 - Adrian Ivasku
在输入命令行时,请写上 USE yourdbname;,因为MySQL不知道你要用哪个数据库。 - Mihai
显示剩余5条评论
2个回答

14

我已经“解决”了。不知道为什么,感觉自己很愚蠢,因为之前没有尝试这样做:

LOAD DATA INFILE 'c:/csv/eventsbig.csv' IGNORE 
INTO TABLE std9
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'

去掉结尾的"IGNORE 1 LINES",它可以处理任何大小的文件。


遗憾的是,对于更复杂的CSV数据,这种方法效果不佳,因为你需要遵守CSV RFC规范进行转义。 - Douglas Gaskell
1
非常感谢,我刚刚在2分钟内导入了9,000,000条记录(4GB)<3。 - Georodin
@DouglasGaskell,在那种情况下的解决方案是什么? - GitHunter0
1
@GitHunter0 写你自己的解析器(不推荐),或者使用现有的解析器(简单,推荐),然后自己处理插入?这并不像这么容易,也可能不是那么快,但是设置可能需要一个下午,并且可能在合理的时间内运行。我以前用SQLite做过这个,可以处理约100k条记录/秒,即每分钟约6百万条记录,对于超过10亿条记录(约350GB)进行管理。尽管这需要几天时间来设置,因为我希望它具有高性能。只有在重复使用时才值得,而不是一次性使用。或者,现在可能已经有一个实用程序可以为您完成此操作。 - Douglas Gaskell

1
LOAD DATA LOW_PRIORITY LOCAL INFILE 'C:\\Learning\\App6_DBconnection\\CC.csv' 
INTO TABLE `test`.`ccd` 
CHARACTER SET armscii8 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES (`Cd_Type`, `Full_Name`, `Billing_Date`);

这将适用于超过150万条记录的大型数据集。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接