需要将大量 csv 文件插入数据库

Posted

技术标签:

【中文标题】需要将大量 csv 文件插入数据库【英文标题】:Larg set of csv files need to be inserted into a database 【发布时间】:2012-03-06 23:10:57 【问题描述】:

我被要求在 CSV 文件上执行 csv -> mysql 插入。

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

这就是我认为我能做的:

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

 copy *.csv  combined.csv 

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

或者

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

有专用服务器

8gb 内存的好电脑

你有什么建议?

【问题讨论】:

无论是否合并文件,都想通过LOAD DATA INFILE导入 你应该把它作为答案:) 不,因为如果这已经回答了您的问题,那么您的问题是重复的,应该关闭;) 【参考方案1】:

使用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;

【讨论】:

【参考方案2】:

一个文件一个文件会更好。如果出现问题,这允许重新启动,而且所有文件是否都相同?

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

【讨论】:

以上是关于需要将大量 csv 文件插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

通过 bigquery-python 库向 BigQuery 插入大量数据

关于将csv文件数据插入数据库的几种方法

我正在尝试在数据库中插入数据 .csv 文件 l 它会显示标题作为列记录吗? [关闭]

需要帮助上传 csv

将数据插入 MySQL 数据库时使用 PHP 替换 CSV 文件中的空值

从 sql 文件或使用 csv 文件将数据插入 mysql