【问题标题】:How to import multiple csvfiles to mysql如何将多个csv文件导入mysql
【发布时间】:2017-12-19 11:29:37
【问题描述】:

我有 3000 个 csv 文件,它们是“分隔和分隔的。每个文件都以从中收集数据的服务器命名。我需要将它们导入数据库以允许我使用数据。

对于我尝试过的单个文件:

mysql -uuser -ppassword --local-infile mydatabase -e "LOAD DATA LOCAL INFILE '/root/downloads/test/reports/mytestcsvfile.csv' INTO TABLE results FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES FIELDS FIELDS ESCAPED BY '\' "

这很好用,只是每个数据元素都用引号引起来。如果我添加

ENCLOSED BY '"'

然后该参数中的 " 停止导入工作,只是给我一个 > 提示。

如果我用

转义 "
ENCLOSED BY '\"' 

然后我得到一个错误:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'FIELDS ENCLOSED BY '"' FIELDS ESCAPED BY '\'' at line 1

我需要将全部内容包含在以下内容中:

#!/bin/bash
FILES= /root/downloads/smtptest/reports/
for f in $FILES
do
  echo "processing $f..."
  mysql -uuser -ppassword --local-infile mydatabase -e "LOAD DATA LOCAL INFILE '/root/downloads/test/reports/$f' INTO TABLE results FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES FIELDS FIELDS ESCAPED BY '\' "
done

如何运行导入并去除“。Mysqlimport 看起来被排除在外,因为它基于文件名导入到表中,而不是我想要的。

还有……

为了让我在必须先运行它的时候为每个文件运行它:

for f in file*.csv; do echo ":" $f ":"; sed -i "s/^/\"$f\",/" "$f";  done

这会将每个服务器名称(文件名)添加到每个文件中每一行的开头,以便它成为数据库中记录的一部分。有没有更优雅的方式来做到这一点?

【问题讨论】:

    标签: mysql csv import delimiter quotes


    【解决方案1】:

    我发现了问题:我多次使用“字段”来定义参数的封闭、终止和转义。当我删除它时,一切都开始工作了

    这行得通:

    !/bin/bash
    for filename in /root/downloads/smtptest/reportsmod/*.csv; do
     echo "processing $filename"
     mysql -uuser -ppassword --local-infile smtpsslcheck -e "LOAD DATA LOCAL INFILE '$filename' INTO TABLE results FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES"
    done
    

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-07
      • 2012-06-20
      相关资源
      最近更新 更多