Как я могу импортировать CSV в таблицу, если в CSV нет всех полей таблицы? - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь импортировать файл CSV, который содержит кучу данных. Данные не имеют первичного ключа или уникального идентификатора, поэтому я создал таблицу с полем «id», которое является первичным ключом и автоматически увеличивается.

Допустим, в таблице три поля: id, LastName и FirstName. Мой CSV-файл имеет только LastName, FirstName. Я получаю кучу ошибок, которые говорят, что строка X не содержит данных для всех столбцов.

Я попытался явно назвать поля, которые я хочу добавить, полагая, что автоматическое увеличение присвоит значение, но это не работает, когда я делаю это:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data (LastName, FirstName);

Я получаю ту же ошибку, строка X не содержит данных для всех столбцов ...

Я попытался затем явно установить id равным Null:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data (id, LastName, FirstName) 
SET id=null;

Та же ошибка Строка X не содержит данных для всех столбцов. Я пытался:

LOAD DATA LOCAL INFILE '/path/insert.csv' INTO TABLE data 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '/n' SET id=null;

Когда я это делаю, он пытается взять первое значение в моем CSV и присвоить его полю id, а затем дает мне неправильное целочисленное значение для столбца 'id' в строке 1.

Как добавить данные в таблицу, если используемый мной CSV-файл не содержит всех полей в таблице? Спасибо!

EDIT:

Вот поля таблицы:

id        | int(11)  | NO   | PRI | NULL    | auto_increment 

LastName  | tinytext | YES  |     | NULL    |                

FirstName | tinytext | YES  |     | NULL    |                

Вот файл CSV:

Smith,John
Coconut,Joe
Ann,Pattye

Они находятся на разностных линиях. Я не могу заставить форматирование stackoverflow взаимодействовать.

Ответы [ 3 ]

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

Я никогда не использовал MariaDB лично, но с большинством баз данных, которые я использовал, все зависит от того, как вы настроили свой столбец ID. Я бы проверил, чтобы убедиться, что он помечен как автоинкремент. Обычно, когда оно установлено как таковое и вы оставляете это поле пустым для вставки, оно автоматически увеличивается (очевидно) и добавляет данные для вас. И может обойтись без него.

0 голосов
/ 27 мая 2019
LOAD DATA LOCAL
    INFILE '/path/insert.csv'
    INTO TABLE data (@x, LastName, FirstName);

То есть кладите вещи, которые вам не нужны или не нужны @variables.

Этот метод также позволяет программно изменять текст перед его сохранением. (См. Руководство.)

Другой подход заключается в создании таблицы с набором столбцов, который соответствует входному файлу; LOAD в это; затем используйте INSERT ... SELECT ..., чтобы скопировать материал в «реальную» таблицу. Это дает вам еще больше возможностей для настройки ваших данных перед их сохранением в реальном месте.

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

Вы пробовали?

ЗАГРУЗИТЬ ЛОКАЛЬНЫЙ ИНФИЛЬ ДАННЫХ '/path/insert.csv' В ТАБЛИЦУ данных (NULL, LastName, FirstName);

...