Как импортировать 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:

введите описание изображения здесь

Ответ 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), вы можете сделать это:

  1. Щелкните правой кнопкой мыши на "Таблицы";
  2. Мастер импорта данных таблицы;
  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 верстак, чтобы сделать ту же работу.

  1. создать новую схему
  2. открыть вновь созданную схему
  3. щелкните правой кнопкой мыши "Таблицы" и выберите "Мастер импорта табличных данных"
  4. укажите путь к файлу csv и имя таблицы и, наконец, настройте тип столбца, поскольку мастер устанавливает тип столбца по умолчанию на основе их значений.

Примечание: посмотрите на файл журнала mysql workbench на наличие ошибок, используя "tail -f [mysqlworkbenchpath]/log/wb*.log"

Ответ 20

Как импортировать CSV файлы в таблицы SQL

Файл примера: CSV файл данных Overseas_trade_index

шаги:

  1. Необходимо создать таблицу для overseas_trade_index.

  2. Необходимо создать столбцы, связанные с 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),
     );
    
  3. Необходимо подключить базу данных MySQL в терминале.

    =>show databases;
    =>use database;
    =>show tables;
    
  4. Пожалуйста, введите эту команду, чтобы импортировать данные 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);
    
  5. Найти эти данные по внешнему торговому индексу в базе данных sqld:

    select * from trade_index;
    

Ответ 21

Используйте Embulk

Embulk - это загрузчик данных с открытым исходным кодом, который помогает передавать данные между различными базами данных, хранилищами, форматами файлов и облачными сервисами.

enter image description here

Видеоурок >> https://youtu.be/LkWcjBkwekg