У меня есть ненормализованный дневник событий 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 записей. Первая строка содержит имена столбцов. Я думаю, что это разделены запятыми, а текст, очевидно, разделены двойной кавычкой.
ОБНОВИТЬ:
Если вы сомневаетесь, прочитайте руководство: 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
записей, и ни одна из загруженных данных, кажется, не в нужном месте.
источник
Ответы:
Кажется, суть вашей проблемы - сопоставление столбцов в CSV-файле с столбцами в таблице.
Многие графические клиенты MySQL имеют очень хорошие диалоги импорта для такого рода вещей.
Мой любимый для работы это Windows HeidiSQL . Это дает вам графический интерфейс для создания
LOAD DATA
команды; Вы можете повторно использовать его программно позже.Снимок экрана: диалоговое окно "Импорт текстового файла"
Чтобы открыть диалоговое окно «Импорт текстового файла», перейдите к
Tools > Import CSV file
:источник
Используйте mysqlimport для загрузки таблицы в базу данных:
Я нашел его на http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/
Чтобы сделать разделитель вкладкой, используйте
--fields-terminated-by='\t'
источник
mysqlimport
используетсяLOAD DATA INFILE...
за кулисами, так что это почти то же самое.LOAD DATA INFILE
, вам нужно создать таблицу, прежде чем вы сможете использоватьmysqlimport
.LOAD DATA INFILE
.--fields-optionally-enclosed-by=\"
и `--fields-escaped-by = \`Простейший способ, которым я импортировал более 200 строк, находится ниже команды в окне phpmyadmin sql
У меня есть простая таблица страны с двумя столбцами CountryId, CountryName
вот данные .csv
вот команда:
Помните одну вещь, никогда не появляйтесь во втором столбце, иначе ваш импорт остановится
источник
LOAD DATA LOCAL INFILE
. Если это приводит к ошибке 1148 «используемая команда не разрешена», вы можете включить ее, запустив mysql в командной строке с--local-infile
.Я использовал этот метод для импорта более 100 КБ записей ( ~ 5 МБ ) за 0,046 с
Вот как вы это делаете:
Очень важно включить последнюю строку, если у вас есть более одного поля, т.е. обычно оно пропускает последнее поле (MySQL 5.6.17)
Затем, если у вас есть первая строка в качестве заголовка для ваших полей, вы можете включить эту строку также
Вот как это выглядит, если у вашего файла есть строка заголовка.
источник
(field_1,field_2 , field_3);
это относится к списку столбцов в файле .csv или в таблице? т.е. что это за поля?phpMyAdmin может обрабатывать импорт CSV. Вот шаги:
Подготовьте файл CSV, чтобы поля были в том же порядке, что и поля таблицы MySQL.
Удалите строку заголовка из CSV (если есть), чтобы в файле были только данные.
Перейдите в интерфейс phpMyAdmin.
Выберите таблицу в левом меню.
Нажмите кнопку импорта вверху.
Перейдите к файлу CSV.
Выберите опцию «CSV используя LOAD DATA».
Введите «,» в «поля, оканчивающиеся на».
Введите имена столбцов в том же порядке, что и в таблице базы данных.
Нажмите кнопку Go, и все готово.
Это примечание, которое я подготовил для своего будущего использования, и делюсь здесь, если кто-то может извлечь пользу
источник
NULL
в CSV для любых автоинкрементных полей / столбцов.Это можно исправить, перечислив столбцы в операторе LOAD DATA. Из руководства :
... так что в вашем случае вам нужно перечислить 99 столбцов в порядке их появления в файле CSV.
источник
Попробуйте это, у меня получилось
IGNORE 1 ROWS здесь игнорирует первую строку, которая содержит имена полей. Обратите внимание, что для имени файла вы должны ввести абсолютный путь к файлу.
источник
В командной строке mysql слишком много проблем при импорте. Вот как вы это делаете:
источник
Если вы используете MySQL Workbench (в настоящее время версия 6.3), вы можете сделать это:
источник
LOAD DATA INFILE
иmysqlimport
(«это не поддерживается в этой версии mysql»)INSERT
запрос и попытался бы выполнить все сразу, но похоже, что выполнение этого способа фактически выполняется один разINSERT
в строке.Я вижу что-то странное. Вы используете для ESCAPING тот же символ, который вы используете для ENCLOSING. Таким образом, движок не знает, что делать, когда он находит «», и я думаю, что именно поэтому, кажется, ничего не в нужном месте. Я думаю, что если вы удалите строку ESCAPING, он должен работать отлично.
Если вы не проанализируете (вручную, визуально, ...) ваш CSV и не найдете, какой персонаж использует для побега. Иногда это «\». Но если у вас его нет, не используйте его.
источник
Еще одно решение - использовать инструмент csvsql из потрясающего пакета csvkit .
Пример использования:
Этот инструмент может автоматически выводить типы данных (поведение по умолчанию), создавать таблицы и вставлять данные в созданную таблицу.
--overwrite
опция может быть использована для удаления таблицы, если она уже существует.--insert
опция - заполнить таблицу из файла.Чтобы установить пакет
Необходимые условия:
python-dev
,libmysqlclient-dev
,MySQL-python
источник
Как импортировать CSV-файлы в таблицы SQL
Файл примера: файл
Overseas_trade_index
данных CSVшаги:
Нужно создать таблицу для
overseas_trade_index
.Необходимо создать столбцы, связанные с CSV-файла.
SQL-запрос:
Необходимо подключить базу данных MySQL в терминале.
Пожалуйста, введите эту команду для импорта данных CSV в таблицы MySQL.
Найти эти данные по внешнему торговому индексу в базе данных sqld:
источник
Если вы используете Windows-машину с загруженной электронной таблицей Excel, новый плагин mySql для Excel просто феноменален. Люди в Oracle действительно хорошо поработали над этим программным обеспечением. Вы можете установить соединение с базой данных непосредственно из Excel. Этот плагин будет анализировать ваши данные и составлять таблицы для вас в формате, совместимом с данными. У меня были огромные CSV-файлы данных для конвертации. Этот инструмент сэкономил много времени.
http://dev.mysql.com/downloads/windows/excel/
Вы можете вносить обновления в Excel, которые будут заполнять базу данных онлайн. Это очень хорошо работало с файлами mySql, созданными на ультра-недорогом хостинге GoDaddy. (Обратите внимание, что когда вы создаете таблицу в GoDaddy, вам нужно выбрать некоторые нестандартные настройки, чтобы разрешить внешний доступ к базе данных ...)
С этим плагином у вас есть чистая интерактивность между вашей электронной таблицей XL и онлайн-хранилищем данных mySql.
источник
Я использую MySQL верстак, чтобы сделать ту же работу.
Примечание: посмотрите на файл журнала mysql workbench на наличие ошибок, используя "tail -f [mysqlworkbenchpath] /log/wb*.log"
источник
Вот пример снимка экрана файла Excel:
Сохраните как и выберите .csv.
И у вас будет, как показано ниже, снимок экрана .csv, если вы откроете его с помощью notepad ++ или любого другого блокнота.
Убедитесь, что вы удалили заголовок и выравнивание столбцов в .csv, как в MySQL таблицы. Замените имя_папки на имя папки
ЗАГРУЗИТЬ ДАННЫЙ ЛОКАЛЬНЫЙ ИНФИЛЬ
'D: /folder_name/myfilename.csv' В СТОЛОВЫЕ ПОЧТОВЫЕ ПОЛЯ, ПРЕКРАЩАЕМЫЕ ',' (fname, lname, email, phone);
Если большие данные, вы можете взять кофе и загрузить его!
Это все, что вам нужно.
источник
В случае, если вы используете Intellij https://www.jetbrains.com/datagrip/features/importexport.html
источник
PHP-запрос для импорта файла CSV в базу данных MySQL
** Пример данных CSV-файла **
источник
источник