Как импортировать несколько CSV-файлов в MySQL

0

У меня есть 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

Это добавляет каждое имя сервера (имя файла) к началу каждой строки в каждом файле, чтобы это стало частью записи в базе данных. Есть ли более элегантный способ сделать это?

Теги:
csv
import
delimiter
quotes

1 ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню