0

将逗号分隔的 txt 文件加载到表中时出现问题。文件很大。它的大小为2 GB,包含65 列34 Lac行。我做了以下设置来加载这个文件:

  • Query-LOAD DATA LOCAL INFILE filename INTO TABLE tablename FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

在文件中my.ini我添加了以下变量

  • [mysqld] max_allowed_packet=60M
  • [myisamchk] key_buffer_size=512M myisam_max_sort_file_size=3G

我是mysql的新手。谁能帮我加载这个文件。当我运行上面的查询时,我得到了 4-5 次以下结果。

Query OK,0 rows affected(25.09 sec)
Records:0 Deleted:0 Skipped:0 Warnings:0
4

4 回答 4

1

尝试不使用 LOCAL 关键字,如果这不能解决您的问题,请发布文本文件的一些第一行,以便我们查看是否所有行都因不匹配参数中指定的模式而被忽略。

更新 1: 现在我看到您正在使用 '\r\n' 终止符

LINES TERMINATED BY '\r\n'

您是否尝试过将此行修改为仅使用“\n”:

LINES TERMINATED BY '\n'

?

更新 2: 尝试在 LOAD DATA 命令中指定表列;

LOAD DATA INFILE filename
INTO TABLE tablename
FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'(
`tableColumn1` , `tableColumn2`, ..., `tableColumn65`
)

可能是文件和表的列数不匹配,或者文件列与表列的顺序不同。

于 2012-05-25T06:28:27.420 回答
1

使用外部 ulil

mysqlimport --ignore-lines=1 --fields-optionally-enclosed-by="\"" --fields-terminated-by=, --lines-terminated-by="\r\n" --user=YOUR_USERNAME --password YOUR_DATABASE tablename.txt
于 2012-05-25T06:27:43.567 回答
0

我自己找到了我的问题的答案。

1.我用gslipts软件拆分了我的文件,并对每个新创建的文件进行了相应的更改。

2.之后,我以正确格式打开这些文件半小时,然后创建每个拆分的 csv 文件(由 gslipts 创建的文件)并触发加载数据命令

于 2012-05-28T07:17:22.393 回答
0

当您的 INFILE 很大时,必须调整 max_allowed_pa​​cket 以适应 5.6 的 refman 中每个此链接的最大 1G。 https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_allowed_pa ​​cket 准备工作可以包括“会话” SET local_infile=1; SET max_allowed_pa​​cket=1073741824(可能需要更多选项)在 LOAD DATA INFILE 文件名 INTO TABLE 表名 ..... 文件名之前可能需要完整路径,即。C:\文件夹\子文件夹\我的文件名.ext

警告将 .ini/.cfg 中的 max_allowed_pa​​cket 更改为 1G 可能会导致日常操作中出现意外的内存压力。使用您的会话变量来满足此会话期间的 1G 要求。如果你没有 1G 的内存可用于此目的,你无论如何也无法成功。

于 2017-08-31T09:42:11.390 回答