ЗАГРУЗИТЬ ДАННЫЙ ИНФИЛЬ выбрать столбцы - PullRequest
0 голосов
/ 16 ноября 2010

У меня есть текстовый файл, в котором все столбцы разделены \ t (вкладка).Всего 34 столбца, но мне нужно только прочитать и вставить первые два столбца, а именно ID и имя.Структура таблицы следующая:

CREATE TABLE <code>temp. itemname (id SMALLINT (5) NOT NULL, name VARCHAR (255) NOT NULL, первичный ключ (id)) ENGINE= InnoDB;

Какой запрос я могу использовать, чтобы выбрать и вставить только первые два столбца и после этого перейти к следующей строке?

load data infile 'itemname.txt' into table itemname

выдает ошибку 1366: Неверное целочисленное значение: «17» для столбца «id» в строке 1

, и я не могу пройти мимо этого.Пока я не выясню это, я ничего не могу сделать ... Кроме того, файл имеет длину 18094 строки, поэтому ручная вставка была бы утомительной, если не сказать больше, и у меня есть и другие подобные файлы.

Ответы [ 2 ]

1 голос
/ 14 января 2014

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

ЗАГРУЗИТЬ ИНФИЛЬ ДАННЫХ 'itemname.txt' INTO TABLE itemname FIELDS TERMINATED BY '\ t'ЛИНИИ, ПРЕКРАЩАЕМЫЕ '\ n' (id, name);

В этом случае терминаторы (\ t и \ n) не являются строго необходимыми, поскольку это значения по умолчанию.Если в вашем входе используются разные терминаторы, вам необходимо указать их и в команде.

0 голосов
/ 16 ноября 2010

Вы можете указать столбцы таблиц, в которые вы хотите вставить данные.

Вот синтаксис команды:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE number LINES]
    [(col_name_or_user_var,...)]
    [SET col_name = expr,...]

Для получения дополнительной информации проверьте документы .

...