【发布时间】: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