Как импортировать файл CSV в таблицу MySQL - PullRequest
271 голосов
/ 03 сентября 2010

У меня есть ненормализованный дневник событий 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), кроме столбцов, которые содержат счетчики (представленные как INT), да / нет (представленные как 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 записей. Первая строка содержит имена столбцов. Я думаю, что он разделен запятыми, а текст, очевидно, разделен двойной кавычкой.

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 записей, и ни одна из загруженных данных, кажется, не в нужном месте.

Ответы [ 19 ]

2 голосов
/ 21 июня 2018

Еще одним решением является использование csvsql инструмента из csvkit suite.

Пример использования:

csvsql --db mysql://$user:$password@localhost/$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
2 голосов
/ 13 ноября 2013

Вы также можете попробовать этот онлайн-инструмент для генерации операторов SQL create / insert на основе вашего CSV. http://www.convertcsvtomysql.com/

Что мне нравится в этом инструменте:

  • Simple
  • Он генерирует не только операторы INSERT, но и операторы CREATE. сгенерировать таблицу
  • При создании операторов CREATE этот инструмент не только делает все поля VARCHAR - он анализирует данные в CSV, и на основании этого анализа он выбирает правильный тип данных.

Недостатки

  • Размер входного файла ограничен 3 МБ
  • Возможно, вы не захотите передавать свои данные третьим лицам
1 голос
/ 01 марта 2019

Я использую mysql workbench, чтобы выполнить ту же работу.

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

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

1 голос
/ 13 июня 2017

Измените имя сервера, имя пользователя, пароль, имя базы данных, путь к вашему файлу, имя таблицы и поле, которое находится в вашей базе данных, которое вы хотите вставить

<?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>'
       }
    ?>
1 голос
/ 31 марта 2017

Вот пример снимка экрана файла Excel:

enter image description here

Сохраните как и выберите .csv.

И вы получите какпоказанный ниже снимок экрана .csv, если вы открываете с помощью notepad ++ или любого другого блокнота.

enter image description here

Убедитесь, что вы удалили заголовок и выровняли столбцы в .csvкак в Таблице MySQL.Замените имя_папки на имя папки

ЗАГРУЗИТЬ ДАННЫЙ ЛОКАЛЬНЫЙ ИНФИЛЬ
'D: /folder_name/myfilename.csv' INTO TABLE mail ПОЛЯ, ПРЕКРАЩЕННЫЕ BY ',' (fname, lname, email, phone);

Если большие данные, вы можете взять кофе и загрузить его!.

Это все, что вам нужно.

1 голос
/ 28 сентября 2016

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,ChristopherKGritton@inbound.plus
Brandon Wilson,541-309-5149,BrandonMWilson@inbound.plus
Craig White,516-795-8065,CraigJWhite@inbound.plus
David Whitney,713-214-3966,DavidCWhitney@inbound.plus
1 голос
/ 23 декабря 2014

Если вы используете Windows-машину с загруженной электронной таблицей Excel, новый плагин mySql для Excel просто феноменален.Люди в Oracle действительно хорошо поработали над этим программным обеспечением.Вы можете установить соединение с базой данных непосредственно из Excel.Этот плагин будет анализировать ваши данные и составлять таблицы для вас в формате, совместимом с данными.У меня были огромные CSV-файлы данных для конвертации.Этот инструмент сэкономил много времени.

http://dev.mysql.com/downloads/windows/excel/

В Excel можно вносить обновления, которые будут заполнять базу данных в режиме онлайн.Это прекрасно работало с файлами mySql, созданными на ультра-недорогом хостинге GoDaddy.(Обратите внимание, когда вы создаете таблицу в GoDaddy, вам нужно выбрать некоторые нестандартные настройки, чтобы разрешить внешний доступ к базе данных ...)

С этим плагином у вас будет чистая интерактивность между вашей электронной таблицей XL и онлайнMySql для хранения данных.

0 голосов
/ 27 мая 2019

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

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

Шаги:

  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;
    
0 голосов
/ 15 ноября 2018

В случае, если вы используете Intellij https://www.jetbrains.com/datagrip/features/importexport.html

enter image description here

...