Как вставить выбранные столбцы из CSV-файла в базу данных MySQL с помощью LOAD DATA INFILE


83

У меня есть файл CSV, содержащий 10 столбцов. Я хочу выбрать только некоторые столбцы из этого файла и загрузить их в базу данных MySQL с помощью LOAD DATA INFILEкоманды.

Ответы:


118

Загрузите данные в таблицу в MySQL и укажите столбцы:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;

@ col1,2,3,4 - это переменные для хранения столбцов CSV-файла (предположим, 4) name, id - столбцы таблицы.


2
Я запустить свой ответ в MySQL и появляется сообщение об ошибке: ERROR 1148 (42000): The used command is not allowed with this MySQL version.
shgnInc 02

@shgnInc ссылается на этот stackoverflow.com/questions/16285864/…
ArK

8
Что делать, если у меня 100 столбцов, и я просто хочу импортировать 2 столбца, тогда я должен написать (@ col1, @ col2, ... @ col100) set name = @ col4, id- @ col2; или есть простой способ?
Дхарма

@Dharma Программа на Python 3 для печати 100 имён столбцовfor i in range(1,100): print("@column",i,",",end="",sep="")
Агнель Вишал,

39
LOAD DATA INFILE 'file.csv'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

Просто замените column1, column2 и т. Д. На свои имена столбцов и поместите @dummy там, где в CSV есть столбец, который вы хотите игнорировать.

Подробности здесь .


5
Я получаю синтаксическую ошибку, когда запускаю что-то подобное. Я должен поставить (field,names)точку с запятой в конце, чтобы заставить его работать.
Стивен Остермиллер

1
Это не масштабируется, если вы не знаете все входящие столбцы csv.
Чарльз Хармон

4
как F это +38 голосов? Это неправильный синтаксис SQL.
Джон

34

Укажите имена столбцов в CSV в операторе загрузки данных в файл.

Код такой:

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);

Здесь вы добавляете данные только в два столбца (вы можете выбрать их по имени столбца) в таблицу.

Единственное, о чем вам нужно позаботиться, это наличие CSV-файла (filename.csv) с двумя значениями в каждой строке (строке). В противном случае, пожалуйста, укажите. У меня другое решение.

Спасибо.


2
вероятно, другие ответы немного устарели. этот работал у меня с MySQL 5.6
Фабио Наподано

Спасибо, что указали полный путь к файлу. Какое-то время я искал каталог MySQL, в который мне нужно поместить файл csv!
Шринат

1
Этот вариант работает лучше всего, хотя путь должен быть из разрешенных безопасных зон. Выполните эту команду SHOW VARIABLES LIKE "secure_file_priv"; а затем перетащите файл csv в это место
Ганеш Кришнан

1
Согласитесь с @FabioNapodano. Для моей версии v5.7 мне нужно было поместить имена столбцов в конец оператора.
Энн Ганн

К сожалению, это не дает ответа на вопрос. Для этого требуется, чтобы в CSV было два столбца, и они вставляются в два определенных столбца в базе данных. Плакат
требует

13

Пример:

содержимое файла ae.csv:

"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"

CREATE TABLE Tabletmp (  
    rec VARCHAR(9) 
);

Для столбца 3:

LOAD DATA INFILE '/local/ae.csv' 
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;


select * from Tabletmp;
    2016
    1982
    1986
    1400

1
Примеры всегда лучше
Pierre de LESPINAY

3

если у вас количество столбцов в таблице базы данных больше, чем количество столбцов в вашем CSV, вы можете поступить следующим образом:

LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable 
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);

0

Для тех, у кого следующая ошибка:

Код ошибки: 1290. Сервер MySQL работает с параметром --secure-file-priv, поэтому он не может выполнить этот оператор.

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

SHOW VARIABLES LIKE "secure_file_priv";

После этого вам нужно скопировать файлы в эту папку и запустить запрос LOAD DATA LOCAL INFILEвместо LOAD DATA INFILE.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.