У меня есть ненормализованный дневник событий CSV от клиента, который я пытаюсь загрузить в таблицу MySQL, чтобы я мог реорганизовать в нормальный формат. Я создал таблицу под названием «CSVImport», которая имеет одно поле для каждого столбца файла CSV. CSV содержит 99 столбцов, так что это было достаточно сложной задачей само по себе:Как импортировать CSV-файл в таблицу MySQL
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);
Нет ограничений нет на столе, и все поля содержат (256) значения VARCHAR, за исключением столбцов, содержащих отсчеты (в лице INT), да/нет (представлено BIT), цены (представлены DECIMAL) и текстовые объявления (представлены TEXT).
Я пытался загрузить данные в файл:
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
записей, и ни одна из данных, которые загружены, кажется, находится в нужном месте.
И если вы находитесь на OSX [Sequel Pro] (http://www.sequelpro.com/), есть удивительный инструмент для импорта, и это ** БЕСПЛАТНО ** ;-) – Merrick
Удивительно, что оригинальный плакат ответил на свой вопрос лучше, чем кто-либо еще ... Я не знаю, почему так много людей готовы дать рекомендации по программному обеспечению, когда есть существующая команда SQL, которая может быть * программной *, а не на основе UI. Я не знаю ни о ком другом, но программным средством для меня является то, что у меня могут быть сценарии, настроенные на автоматическое импортирование файлов на отметках времени, тогда как UI-based - чисто ручной. –
@ChrisCirefice: Я думаю, что принятый ответ объясняет это хорошо. Ему понадобилась помощь вручную, создавая команду «load data», с которой может помочь графическая программа. После того, как графическая программа создала команду «load data», он мог бы затем повторно использовать ее программно. – AlexC