【发布时间】:2016-09-15 02:06:14
【问题描述】:
我是 Mysql 的新手,我正在使用它来利用我拥有的几个非常大的 CSV 文件(有些超过一百万行)。我在Win7-64 Ultimate上。我已经安装了 MySql Workbench v. 6.3.6 build 511 64 bit。我读了一个类似的问题,但是我不能发表评论,因为我是新手。无论如何,我得到了一个不同的错误。
我已经建立了一个名为 crash0715 的数据库,并创建了一个名为 driver_old 的包含五列的表。第一列是一个报告编号(设置为 INT(20)),它将被键入到其他文件。它包含一些重复项,具体取决于其他列中的数据。接下来的四列包含 1 位或 2 位数字数据。
我将 report_number 列设置为 INT(20),主键,不为空。 其他 4 个设置为 INT 或 INT(2)
当我尝试通过 GUI 在 5 列 CSV 文件(在我的 c:\ 根目录中命名为 do.csv)中导入超过 100 万行时,程序挂起。我让它运行了 12 个小时以上,我的任务管理器显示该程序正在使用 25% 的 cpu。
接下来我尝试了命令行。切换到数据库后,我用 LOAD DATA LOCAL INFILE 'c:/do.csv' INTO TABLE driver_old FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
在尝试两次导入之前,我已从 CSV 中删除了标题行。
我收到以下消息: 查询正常,111 行受影响,65535 个警告 记录:1070145 已删除:0 跳过:1070034 警告:2273755
我阅读了 SHOW WARNINGS 的前几行,它们如下: 1264 第 1 行的列 'report_number' 的值超出范围。 1261 第 1 行不包含所有列的数据
这两个重复所有其他行。
还有一个 1062 键 'primary' 的重复条目 '123456789'(123456789 是代表值)
其他两个代码也再次出现。
CSV 文件的第一列没有空格,但其他列有一些。
知道我在这里做错了什么吗?
【问题讨论】:
-
这里有很多不同的问题。我建议你分而治之。我会先获取较小的数据子集(可能是 1000 行 csv?)并确保它首先有效。 Out of range... 和 Duplicate entry... 消息表明您的 csv 数据与您要导入的表的定义不匹配...您可能会这样用更小、更方便的数据集很清楚这一点。
标签: csv import mysql-workbench