我有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
这会将每个服务器名称(文件名)添加到每个文件中每行的开头,以便它成为数据库中记录的一部分。有更优雅的方式吗?
我发现了问题:我多次使用“字段”,以定义封闭,终止和转义的参数。当我删除它一切都开始工作
这有效:
!/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