2017-12-19 4 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 
관련 문제