Главная > MySQL, PHP > mysql: импорт в таблицу из текстового файла

mysql: импорт в таблицу из текстового файла

Было актуально для импорта большого csv, для экономии ресурсов на разборку файла при помощи php.

LOAD DATA LOCAL INFILE "file_name.csv"
INTO TABLE table_name
COLUMNS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

Готовый пример php:

mysql_query("TRUNCATE TABLE `bitrix_catalog`;");
mysql_query("LOAD DATA LOCAL INFILE \"".$file_catalog_path."\"
INTO TABLE bitrix_catalog
COLUMNS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '\"'
ESCAPED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;");


Скрипт актуален для импорта файлов очень большого размера для экономии ресурсов хостинга, таких как время выполнения скрипта, лимит оперативной памяти и т.д. В конкретном случае использовалась дальнейшая обработка данных, выборка и частичная вставка в необходимые таблицы БД структурированных данных.

Используя LOAD DATA LOCAL INFILE файл размеров 200Mb импортировался практически мгновенно, в отличии от его разбора при помощи fgetcsv, когда импорт произвести не удалось вовсе.

К тому же если импортируемый текст в формате csv и в ячейках встречаются переносы строк, то используя fgetcsv разобрать такую таблицу не удастся. Необходимо или использовать сторонние библиотеки вроде этой http://krylov.org.ua/?p=999 или писать собственных импорт что потребует еще и дополнительных затрат времени.

Есть вариант использования LOAD DATA INFILE без использования опции LOCAL, но на хостинге такую команду выполнить скорее всего не удастся, т.к. у пользователя будет недостаточно привилегий.

Categories: MySQL, PHP Tags: ,
  1. Пока что нет комментариев.
Похожие публикации