나는 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
각 파일의 각 행의 시작은 데이터베이스의 레코드 일부가됩니다. 이 일을하는보다 우아한 방법이 있습니까?