2017-12-19 5 views
0

私は3000個のcsvファイルを区切って区切り、それぞれの名前はデータを収集したサーバの名前になっています。データ私が試した個々のファイルについては複数のcsvfilesをmysqlにインポートする方法

:。。

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 

これは、各サーバー名(ファイル名)を追加各ファイルの各行の先頭がデータベース内のレコードの一部になるようにします。これを行うよりエレガントな方法はありますか?

答えて

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 
関連する問題