0

我被要求在 CSV Files 上执行 csv -> mysql insert 。

他们有 20k 个 csv 文件,其中包含 100 到 100k 行数据。

所以这就是我认为我能做的:

在我的机器上,我可以使用一个简单的命令将所有文件合并为 1:

 copy *.csv  combined.csv 

然后处理该文件,然后使用 php fgetcsv 处理该文件并将其插入数据库中。

或者

我可以编写一个 php 程序来读取目录处理每个文件,并在完成后将其传输到另一个文件夹。

有专用服务器可用

8GB内存可用的好电脑

你有什么建议?

4

2 回答 2

3

使用LOAD DATA INFILE。最好逐个文件插入数据文件。

LOAD DATA INFILE '/path/to/data.csv' 
INTO TABLE `table` 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 

以批处理模式运行 20k 个文件。在命令中输入密码以防止它询问。

#!/bin/bash

for f in /path/to/*.csv;
do 
    mysql -uroot -pPASSWORD DATABASE \
    -e "LOAD DATA INFILE '$f' 
        INTO TABLE `table` 
        FIELDS TERMINATED BY ',' 
        LINES TERMINATED BY '\n'"
    echo $f is imported ...
done;
于 2012-03-06T23:22:32.930 回答
0

逐个文件执行它会是一个更好的主意。如果出现问题,这允许重新启动,而且所有文件是否相同?

您可以使用 php 脚本生成 sql 命令并执行这些 .

于 2012-03-06T23:15:12.740 回答