【问题标题】:Import Big csv file into mySql将大 csv 文件导入 mySql
【发布时间】:2015-11-26 18:13:59
【问题描述】:

我正在尝试将 300 mg 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 mg 等),但是当我尝试加载像上面提到的那样的大文件时,MySql Workbench(我用来执行我的查询)运行命令,一切正常并且绿色,但 0 行受影响。表中没有任何变化。

我 10000% 确定该表没有问题,因为当我取出该文件的一部分(例如 1mg)并将其加载到同一个表中时,它可以正常工作。

有人遇到过这种问题吗?

谢谢。

【问题讨论】:

  • 日志中的任何内容?服务器还是客户端?您可能会遇到超时问题,以确保我需要查看日志。
  • 从 MySQL 命令行尝试。
  • 我将自己的计算机用作服务器。它看起来不像超时,因为它声明为已完成。这是日志: 15:44:29 LOAD DATA INFILE 'c:/csv/bigSCV.csv' IGNORE INTO TABLE table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES 0 row(s)受影响的记录:0 删除:0 跳过:0 警告:0 1.529 秒
  • @wchiquito - 没试过。好主意,我现在就试一试。
  • @Mihai,是的,我只是把它作为参考,我的表在我的服务器上被称为 test1。

标签: mysql csv


【解决方案1】:

我已经“解决”了它。不知道为什么,我觉得很愚蠢,因为没有早点玩这个声明,而是这样:

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

最后没有“IGNORE 1 LINES”,它适用于任何大小的文件。

【讨论】:

  • 遗憾的是,这不适用于更复杂的 CSV 数据,因为您必须遵守 CSV RFC。
  • 非常感谢我刚刚在 2 分钟内导入了 9.000.000 个条目(4gb)
  • @DouglasGaskell,这种情况下的解决方案是什么?
  • @GitHunter0 编写自己的解析器(不推荐),或者使用现有的解析器(简单,推荐),然后自己处理插入?它不像这样容易,也可能没有那么快,但可能需要一个下午的时间来设置,并且可能会在合理的时间内运行。不久前我用 SQLite 做到了这一点,并且设法处理约 10 万条记录/秒,即约 600 万/米,超过 10 亿条记录(约 350GB)。虽然这需要几天的时间来设置,因为我希望它具有高性能。只值得重复使用,而不是一次性使用。或者,现在可能有一个实用程序可以为您执行此操作。
【解决方案2】:
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 万条记录的大型数据集。

【讨论】:

    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2013-05-17
    • 2015-02-24
    • 2019-09-17
    • 1970-01-01
    相关资源
    最近更新 更多