MYSQL импортирует данные из csv, используя LOAD DATA INFILE
Я импортирую некоторые данные из 20000 строк из файла CSV в Mysql.
Столбцы в CSV находятся в другом порядке, чем столбцы таблицы MySQL. Как автоматически назначить столбцы, соответствующие столбцам таблицы Mysql?
Когда я выполняю
LOAD DATA INFILE'abc.csv' INTO TABLE abc
этот запрос добавляет все данные в первый столбец.
Пожалуйста, предложите автоматический синтаксис для импорта данных в Mysql.
Ответы
Ответ 1
Вы можете использовать команду LOAD DATA INFILE для импорта файла csv в таблицу.
Проверьте эту ссылку MySQL - LOAD DATA INFILE.
LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);
Ответ 2
Вероятно, вам нужно установить FIELDS TERMINATED BY ','
или что-то вроде разделителя.
Для CSV файла ваше утверждение должно выглядеть следующим образом:
LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Ответ 3
Перед импортом файла вам необходимо подготовить следующее:
- Таблица базы данных, в которую будут импортированы данные из файла.
- Файл CSV с данными, которые соответствуют числу столбцов
таблицу и тип данных в каждом столбце.
- У учетной записи, которая подключается к серверу базы данных MySQL, есть ФАЙЛ
и привилегии INSERT.
Предположим, что мы имеем следующую таблицу:
![введите описание изображения здесь]()
СОЗДАТЬ ТАБЛИЦУ, ИСПОЛЬЗУЯ СЛЕДУЮЩИЙ ЗАПРОС:
CREATE TABLE IF NOT EXISTS `survey` (
`projectId` bigint(20) NOT NULL,
`surveyId` bigint(20) NOT NULL,
`views` bigint(20) NOT NULL,
`dateTime` datetime NOT NULL
);
ВАШ ОБЗОР CSV ДОЛЖЕН БЫТЬ ПРАВИЛЬНО ФОРМАТИРОВАН ДЛЯ ПРИМЕРЫ СМОТРЕТЬ СЛЕДУЮЩИЕ ПРИЛОЖЕННОЕ ИЗОБРАЖЕНИЕ:
![введите описание изображения здесь]()
Если все в порядке, выполните следующие действия: ЗАГРУЗИТЕ ДАННЫЕ ИЗ ФАЙЛА CSV:
ПРИМЕЧАНИЕ. Добавьте абсолютный путь к файлу CSV.
LOAD DATA INFILE '/var/www/csv/data.csv'
INTO TABLE survey
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Если все сделано. вы успешно экспортировали данные из CSV в таблицу
Ответ 4
Синтаксис:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' INTO TABLE `tbl_name` CHARACTER SET [CHARACTER SET charset_name] FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] [LINES[TERMINATED BY 'string']] [IGNORE number {LINES | ROWS}]
См. этот пример:
LOAD DATA LOCAL INFILE 'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer` CHARACTER SET 'utf8' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
Ответ 5
Вы можете загружать данные из CSV или текстового файла.
Если у вас есть текстовый файл с записями из таблицы, вы можете загрузить эти записи в таблицу.
Например, если у вас есть текстовый файл, где каждая строка представляет собой запись со значениями для каждого столбца, вы можете загрузить записи таким образом.
table.sql
id //field 1
name //field2
table.txt
1,peter
2,daniel
...
- пример в окнах
LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';
Ответ 6
Если вы используете LOAD DATA LOCAL INFILE
из оболочки Windows, и вам нужно использовать OPTIONALLY ENCLOSED BY '"'
, вам нужно будет сделать что-то подобное, чтобы правильно выполнить символы:
"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out
Ответ 7
Вставить объем более 7000000 записей за 1 минуту в базе данных (сверхбыстрый запрос с расчетом)
mysqli_query($cons, '
LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE tablename
FIELDS TERMINATED by \',\'
LINES TERMINATED BY \'\n\'
IGNORE 1 LINES
(isbn10,isbn13,price,discount,free_stock,report,report_date)
SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
RRP_nl = RRP * 1.44 + 8,
RRP_bl = RRP * 1.44 + 8,
ID = NULL
')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1;
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');
RRP и RRP_nl и RRP_bl не находятся в csv, но мы вычисляем, что и после вставки, что.
Ответ 8
Я получаю код ошибки: 1290. Сервер MySQL работает с ключом -secure-file-priv
, поэтому он не может выполнить этот оператор
Это работало для меня на Windows 8.1 64 бит, используя wampserver 3.0.6 64bit.
Отредактированный файл my.ini из C:\wamp64\bin\mysql\mysql5.7.14
Удалить запись secure_file_priv c:\wamp64\tmp\(или все, что у вас есть)
Остановил все: -exit wamp etc.- и перезапустил все; затем punt мой файл cvs на C:\wamp64\bin\mysql\mysql5.7.14\data\u242349266_recur (последний каталог, являющийся моим именем базы данных)
выполняется
LOAD DATA INFILE 'myfile.csv'
INTO TABLE alumnos
ПОЛЯ, ПРОВЕРЯЕМЫЕ ','
ENCLOSED BY '"'
ЛИНИИ, ПРЕРЫВАННЫЕ '\ r\n'
IGNORE 1 LINES
... и VOILA!!!
Ответ 9
предположим, что вы используете xampp и phpmyadmin
у вас есть имя файла 'ratings.txt' имя таблицы 'рейтинги' и имя базы данных 'movies'
если ваш xampp установлен в "C:\xampp \"
скопируйте файл "ratings.txt" в папку "C:\xampp\mysql\data\movies"
LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
Надеюсь, это поможет вам опустить вашу ошибку, если вы делаете это на localhost