Как импортировать CSV файл в таблицу MySQL
У меня есть ненормализованные события - дневной CSV от клиента, который я пытаюсь загрузить в таблицу MySQL, чтобы я мог реорганизовать в нормальный формат. Я создал таблицу под названием "CSVImport", которая имеет одно поле для каждого столбца файла CSV. CSV содержит 99 столбцов, поэтому это была довольно сложная задача сама по себе:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
В таблице нет ограничений, и все поля содержат значения VARCHAR (256), за исключением столбцов, которые содержат count (представлены INT), yes/no (представлены BIT), цены (представленные DECIMAL) и текстовые объявления (представлены текстом).
Я попытался загрузить данные в файл:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
Вся таблица заполняется NULL
.
Я думаю, проблема в том, что текстовые объявления содержат более одной строки, а MySQL анализирует файл так, как если бы каждая новая строка соответствовала одной строке базы данных. Я могу загрузить файл в OpenOffice без проблем.
Файл clientdata.csv содержит 2593 строки и 570 записей. Первая строка содержит имена столбцов. Я думаю, что он разделен запятыми, и текст, по-видимому, ограничен с помощью doublequote.
UPDATE:
В случае сомнений прочитайте руководство: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Я добавил некоторую информацию в оператор LOAD DATA
, который OpenOffice был достаточно умен, чтобы сделать вывод, и теперь он загружает правильное количество записей:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Но все еще есть много полностью NULL
записей, и ни одна из данных, которые загружены, кажется, находится в нужном месте.
Ответы
Ответ 1
Ядро вашей проблемы похоже на сопоставление столбцов в CSV файле с таковыми в таблице.
Многие графические клиенты mySQL имеют очень приятные диалоговые окна импорта для такого рода вещей.
Моим любимым для работы является Windows HeidiSQL. Он предоставляет графический интерфейс для создания команды LOAD DATA
; вы можете повторно использовать его программно позже.
![Импорт текстового файла]()
Снимок экрана: диалог "Импорт текстового файла"
Чтобы открыть диалоговое окно "Импорт текстового файла", перейдите к Tools > Import CSV file
:
![введите описание изображения здесь]()
Ответ 2
Используйте mysqlimport для загрузки таблицы в базу данных:
mysqlimport --ignore-lines=1 \
--fields-terminated-by=, \
--local -u root \
-p Database \
TableName.csv
Я нашел его на http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
Чтобы сделать разделителем вкладку, используйте --fields-terminated-by='\t'
Ответ 3
Самый простой способ, которым я импортировал более 200 строк, ниже команды в окне phpmyadmin sql
У меня есть простая таблица страны с двумя столбцами
CountryId, CountryName
здесь .csv data ![CSV FILE]()
вот команда:
LOAD DATA INFILE 'c:/country.csv'
INTO TABLE country
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
Помните одно, никогда не появляющееся во втором столбце, иначе ваш импорт остановится
Ответ 4
Я знаю, что вопрос старый, но я хотел бы поделиться этим
Я использовал этот метод для импорта более 100 КБ записей (~ 5 МБ) за 0,046 с
Вот как ты это делаешь:
LOAD DATA LOCAL INFILE
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);
Очень важно включить последнюю строку, если у вас более одного поля, т.е. обычно оно пропускает последнее поле (MySQL 5.6.17)
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);
Затем, если у вас есть первая строка в качестве заголовка для ваших полей, вы можете включить эту строку также
IGNORE 1 ROWS
Вот как это выглядит, если в вашем файле есть строка заголовка.
LOAD DATA LOCAL INFILE
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(field_1,field_2 , field_3);
Ответ 5
phpMyAdmin может обрабатывать импорт CSV. Вот шаги:
-
Подготовьте CSV файл, чтобы поля были в том же порядке, что и поля таблицы MySQL.
-
Удалите строку заголовка из CSV (если есть), чтобы в файле были только данные.
-
Перейдите в интерфейс phpMyAdmin.
-
Выберите таблицу в левом меню.
-
Нажмите кнопку импорта вверху.
-
Перейдите в файл CSV.
-
Выберите параметр "CSV, используя LOAD DATA".
-
Введите "," в "поля, завершенные".
-
Введите имена столбцов в том же порядке, что и в таблице базы данных.
-
Нажмите кнопку "Пуск", и все будет готово.
Это примечание, которое я подготовил для своего будущего использования и поделился здесь, если кому-то может помочь.
Ответ 6
В следующий раз, когда вам нужно сделать что-то подобное, попробуйте использовать sqlizer.io. Это простой онлайн-инструмент, в который вы можете загрузить свой CSV файл. Он будет генерировать команду CREATE TABLE со всеми правильными типами и серией операторов INSERT, которые соответствуют созданной таблице.
Вам просто нужно изменить тип файла из таблицы Excel в CSV файл:
![enter image description here]()
Ответ 7
Вы можете исправить это, указав столбцы в инструкции LOAD DATA. Из руководства :
LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
... поэтому в вашем случае вам нужно указать 99 столбцов в том порядке, в котором они отображаются в файле csv.
Ответ 8
Командная строка mysql подвержена слишком большому количеству проблем при импорте. Вот как вы это делаете:
- использовать excel для редактирования имен заголовков без пробелов
- сохранить как .csv
- используйте бесплатный Navicat Lite Sql Browser для импорта и автоматического создания новой таблицы (укажите имя)
- откройте новую таблицу, вставьте основной столбец автоматического номера для идентификатора
- измените тип столбцов по желанию.
- сделано!
Ответ 9
Попробуй, это сработало для меня
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 ROWS;
IGNORE 1 ROWS здесь игнорирует первую строку, которая содержит имена полей. Обратите внимание, что для имени файла вы должны ввести абсолютный путь к файлу.
Ответ 10
Если вы используете MySQL Workbench (в настоящее время версия 6.3), вы можете сделать это:
- Щелкните правой кнопкой мыши на "Таблицы";
- Мастер импорта данных таблицы;
- Выберите свой CSV файл и следуйте инструкциям (также может использоваться JSON); Хорошо, что вы можете создать новую таблицу на основе файла CSV, который вы хотите импортировать или загрузить данные в существующую таблицу
![enter image description here]()
Ответ 11
Я вижу что-то странное. Вы используете для ESCAPING тот же символ, который вы используете для ENCLOSING. Таким образом, движок не знает, что делать, когда он находит "", и я думаю, что именно поэтому, кажется, ничто не находится в нужном месте. Я думаю, что если вы удалите строку ESCAPING, он должен работать отлично.
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Если вы не проанализируете (вручную, визуально,...) свой CSV и не найдете, какой персонаж использует для побега. Иногда это "\". Но если у вас его нет, не используйте его.
Ответ 12
Вы также можете попробовать этот онлайн-инструмент для создания SQL create/insert операторов на основе CSV.
http://www.convertcsvtomysql.com/
Что мне нравится в этом инструменте:
- Простой
- Он не только генерирует инструкции INSERT, но также и выражения CREATE
для создания таблицы
- При создании инструкций CREATE этот инструмент не просто делает все поля VARCHAR - он анализирует данные в вашем CSV и на основе этого анализа выбирает правильный тип данных.
Недостатки
- Размер входного файла ограничен 3mb
- Возможно, вы не захотите отдать свои данные третьим лицам.
Ответ 13
Еще одно решение - использовать инструмент csvsql из потрясающего пакета csvkit.
Пример использования:
csvsql --db mysql://$user:[email protected]/$database --insert --tables $tablename $file
Этот инструмент может автоматически определять типы данных (поведение по умолчанию), создавать таблицы и вставлять данные в созданную таблицу. --overwrite
можно использовать для удаления таблицы, если она уже существует. --insert
- заполнить таблицу из файла.
Чтобы установить пакет
pip install csvkit
Пререквизиты: python-dev
, libmysqlclient-dev
, MySQL-python
apt-get install python-dev libmysqlclient-dev
pip install MySQL-python
Ответ 14
Если вы используете Windows-машину с загруженной электронной таблицей Excel, новый плагин mySql в Excel является феноменальным. Люди в Oracle действительно хорошо справились с этим программным обеспечением. Вы можете напрямую подключиться к базе данных из Excel. Этот плагин будет анализировать ваши данные и настраивать таблицы для вас в формате, совместимом с данными. У меня были некоторые файлы csv больших монстров данных для преобразования. Этот инструмент был большой экономии времени.
http://dev.mysql.com/downloads/windows/excel/
Вы можете делать обновления из Excel, которые будут заполняться в базе данных онлайн. Это очень хорошо работало с файлами mySql, созданными на ультра дешевом хостинге GoDaddy. (Обратите внимание, что когда вы создаете таблицу в GoDaddy, вам нужно выбрать некоторые нестандартные настройки, чтобы отключить доступ к базе данных в базе данных...)
С помощью этого плагина у вас есть чистая интерактивность между вашей электронной таблицей XL и онлайн-хранилищем данных mySql.
Ответ 15
PHP-запрос для импорта csv файла в базу данных mysql
$query = <<<EOF
LOAD DATA LOCAL INFILE '$file'
INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(name,mobile,email)
EOF;
if (!$result = mysqli_query($this->db, $query))
{
exit(mysqli_error($this->db));
}
** Примеры данных файла CSV **
name,mobile,email
Christopher Gritton,570-686-3439,[email protected]
Brandon Wilson,541-309-5149,[email protected]
Craig White,516-795-8065,[email protected]
David Whitney,713-214-3966,[email protected]
Ответ 16
Вот пример снимка экрана excel:
![введите описание изображения здесь]()
Сохранить как и выбрать .csv.
И вы получите, как показано ниже. CSV-экран данных, если вы открываете его с помощью блокнота ++ или любого другого блокнота.
![введите описание изображения здесь]()
Убедитесь, что вы удаляете заголовок и выравниваете столбцы в .csv, как в таблице mysql.
Замените имя_папки на имя вашей папки
ЛОКАЛЬНАЯ ИНФОРМАЦИЯ ЗАГРУЗИТЬ ДАННЫЕ
'D:/folder_name/myfilename.csv'
INTO TABLE mail
ПОЛЯ, ПРЕРЫВШИЕСЯ ','
(имя, имя, адрес электронной почты, телефон)
Если большие данные, вы можете взять кофе и загрузить его.
Это все, что вам нужно.
Ответ 17
Измените имя сервера, имя пользователя, пароль, имя db, путь к вашему файлу, имя_таблицы и поле, которое находится в вашей базе данных, которую вы хотите вставить
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "bd_dashboard";
//For create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$query = "LOAD DATA LOCAL INFILE
'C:/Users/lenovo/Desktop/my_data.csv'
INTO TABLE test_tab
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(name,mob)";
if (!$result = mysqli_query($conn, $query)){
echo '<script>alert("Oops... Some Error occured.");</script>';
exit();
//exit(mysqli_error());
}else{
echo '<script>alert("Data Inserted Successfully.");</script>'
}
?>
Ответ 18
Я использую MySQL верстак, чтобы сделать ту же работу.
- создать новую схему
- открыть вновь созданную схему
- щелкните правой кнопкой мыши "Таблицы" и выберите "Мастер импорта табличных данных"
- укажите путь к файлу csv и имя таблицы и, наконец, настройте тип столбца, поскольку мастер устанавливает тип столбца по умолчанию на основе их значений.
Примечание: посмотрите на файл журнала mysql workbench на наличие ошибок, используя "tail -f [mysqlworkbenchpath]/log/wb*.log"
Ответ 19
В случае, если вы используете Intellij https://www.jetbrains.com/datagrip/features/importexport.html
![enter image description here]()
Ответ 20
Как импортировать CSV файлы в таблицы SQL
Файл примера: CSV файл данных Overseas_trade_index
шаги:
-
Необходимо создать таблицу для overseas_trade_index
.
-
Необходимо создать столбцы, связанные с CSV файла.
SQL-запрос:
( id int not null primary key auto_increment,
series_reference varchar (60),
period varchar (60),
data_value decimal(60,0),
status varchar (60),
units varchar (60),
magnitude int(60),
subject text(60),
group text(60),
series_title_1 varchar (60),
series_title_2 varchar (60),
series_title_3 varchar (60),
series_title_4 varchar (60),
series_title_5 varchar (60),
);
-
Необходимо подключить базу данных MySQL в терминале.
=>show databases;
=>use database;
=>show tables;
-
Пожалуйста, введите эту команду, чтобы импортировать данные CSV в таблицы MySQL.
load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5);
-
Найти эти данные по внешнему торговому индексу в базе данных sqld:
select * from trade_index;
Ответ 21
Используйте Embulk
Embulk - это загрузчик данных с открытым исходным кодом, который помогает передавать данные между различными базами данных, хранилищами, форматами файлов и облачными сервисами.
![enter image description here]()
Видеоурок >> https://youtu.be/LkWcjBkwekg