So fügen Sie ausgewählte Spalten aus einer CSV-Datei mit LOAD DATA INFILE in eine MySQL-Datenbank ein

83

Ich habe eine CSV-Datei, die 10 Spalten enthält. Ich möchte nur einige Spalten aus dieser Datei auswählen und sie mit dem LOAD DATA INFILEBefehl in eine MySQL-Datenbank laden .

Ugesh Gali
quelle

Antworten:

118

Laden Sie Daten in eine Tabelle in MySQL und geben Sie Spalten an:

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 sind Variablen, die den Namen der CSV-Dateispalten enthalten (angenommen 4), ID sind Tabellenspalten.

Arche
quelle
2
Ich führe deine Antwort in MySQL aus und erscheine einen Fehler : ERROR 1148 (42000): The used command is not allowed with this MySQL version.
shgnInc
@shgnInc refere this stackoverflow.com/questions/16285864/…
ArK
8
Was ist, wenn ich 100 Spalten habe und nur 2 Spalten importieren möchte, dann sollte ich schreiben (@ col1, @ col2, ... @ col100) set name = @ col4, id- @ col2; oder gibt es einen einfachen weg?
Dharma
@ Dharma Ein Python 3-Programm zum Drucken von 100 Spaltennamenfor i in range(1,100): print("@column",i,",",end="",sep="")
Agnel Vishal
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';

Ersetzen Sie einfach die Spalte1, Spalte2 usw. durch Ihre Spaltennamen und setzen Sie @dummy an eine Stelle, an der sich eine Spalte in der CSV befindet, die Sie ignorieren möchten.

Alle Details hier .

Marc B.
quelle
5
Ich erhalte einen Syntaxfehler, wenn ich so etwas ausführe. Ich muss das (field,names)kurz vor das Semikolon am Ende setzen, damit es funktioniert.
Stephen Ostermiller
1
Dies skaliert nicht, es sei denn, Sie kennen alle eingehenden CSV-Spalten.
Charles Harmon
4
Wie ist das F diese +38 Stimmen? Es ist eine falsche SQL-Syntax.
John
34

Geben Sie den Namen der Spalten in der CSV in der Anweisung load data infile an.

Der Code lautet wie folgt:

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

Hier fügen Sie der Tabelle nur Daten zu zwei Spalten hinzu (Sie können sie mit dem Namen der Spalte auswählen).

Das einzige, worauf Sie achten müssen, ist, dass Sie eine CSV-Datei (Dateiname.csv) mit zwei Werten pro Zeile (Zeile) haben. Ansonsten bitte erwähnen. Ich habe eine andere Lösung.

Vielen Dank.

Ataboy Josef
quelle
2
wahrscheinlich sind die anderen Antworten etwas veraltet. Dieser arbeitete für mich mit MySQL 5.6
Fabio Napodano
Vielen Dank, dass Sie den vollständigen Pfad zur Datei angegeben haben. Für einen Moment suchte ich nach dem MySQL-Verzeichnis, in das ich die CSV-Datei legen muss!
Shrinath
1
Dieser funktioniert am besten, obwohl der Pfad von den zulässigen Sicherheitsbereichen ausgehen muss. Führen Sie diesen Befehl aus. SHOW VARIABLES LIKE "secure_file_priv"; und dann die CSV-Datei an diesem Ort
ablegen
1
Stimmen Sie mit @FabioNapodano überein. Für meine Version 5.7 musste ich die Spaltennamen am Ende der Anweisung einfügen.
Anne Gunn
Dies beantwortet die Frage leider nicht. Dies erfordert zwei Spalten in der CSV-Datei und fügt sie in zwei bestimmte Spalten in der Datenbank ein. Das Plakat fordert das Ziehen von 2 Spalten von einem csv von 10.
daprezjer
12

Beispiel:

Inhalt der ae.csv-Datei:

"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) 
);

Für nur Spalte 3 setzen:

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
Roberto Góes
quelle
1
Beispiele sind immer besser
Pierre de LESPINAY
3

Wenn Ihre Datenbanktabelle mehr Spalten enthält als mehr Spalten in Ihrer CSV, können Sie folgendermaßen vorgehen:

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,...);
Abderrahmane
quelle
0

Für diejenigen, die folgenden Fehler haben:

Fehlercode: 1290. Der MySQL-Server wird mit der Option --secure-file-priv ausgeführt, sodass diese Anweisung nicht ausgeführt werden kann

Sie können diesen Befehl einfach ausführen, um zu sehen, aus welchem ​​Ordner Dateien geladen werden können:

SHOW VARIABLES LIKE "secure_file_priv";

Danach müssen Sie die Dateien in diesen Ordner kopieren und die Abfrage mit LOAD DATA LOCAL INFILEstatt ausführen LOAD DATA INFILE.

Nicolas Bouvrette
quelle