如何将多个csv文件导入mysql

问题描述 投票:0回答:1

我有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个回答
0
投票

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

这有效:

!/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
© www.soinside.com 2019 - 2024. All rights reserved.