wake-up-neo.com

Wie überspringen Sie Spalten in einer CSV-Datei, wenn Sie mit LOAD DATA INFILE in MySQL-Tabelle importieren?

Ich habe eine CSV-Datei mit 11 Spalten und eine MySQL-Tabelle mit 9 Spalten. 

Die CSV-Datei sieht folgendermaßen aus:

col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11

und die MySQL-Tabelle sieht folgendermaßen aus:

col1, col2, col3, col4, col5, col6, col7, col8, col9

Ich muss die Spalten 1-8 der CSV-Datei direkt den ersten 8 Spalten der MySQL-Tabelle zuordnen. Ich muss dann die nächsten beiden Spalten in der CSV-Datei überspringen und dann Spalte 11 der CSV-Datei der Spalte 9 der MySQL-Tabelle zuordnen.

Im Moment verwende ich den folgenden SQL-Befehl:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'

Der obige Code ordnet jedoch die ersten 9 Spalten der CSV-Datei den 9 Spalten in der MySQL-Tabelle zu.

50
Camsoft

Aus MySQL-Dokumenten:

Sie können einen Eingabewert auch mit .__ löschen. Zuweisung zu einer Benutzervariable und die Variable keiner Tabelle zuweisen Säule:

LOAD DATA INFILE 'file.txt'  
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
77
grapefrukt

step1.deal mit awk.

cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt

step2.load in mysql.

load data local infile 'new_file' into table t1(...)

die unten beschriebene Methode ist einfach, aber in der niedrigeren Version von MySQL nicht zulässig.

LOAD DATA INFILE 'file.txt'  
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
4
brzhang

@ deemi :

Die einzige Möglichkeit, den @dummy zu ignorieren, besteht darin, die Standardeinstellung des Feldes auf AUTO INCREMENT..__ zu setzen. So können Sie das Feld überspringen und einfach wie folgt codieren.

LOAD DATA INFILE 'file.txt'  
INTO TABLE t1 (column2, column3, column4, column5);

// setzt voraus, dass der Feldname column1 standardmäßig auf AUTO INCREMENT festgelegt ist.

0
Ataboy Josef

Ich denke, es gibt eine weitere Änderung im Code:

Der folgende SQL-Befehl:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'

-wird wahrscheinlich zu einem Datenkürzungsfehler führen.

Daher ist es besser, LINES TERMINATED BY '\r\n' anstelle von LINES TERMINATED BY '\n' zu verwenden.

SO wird der Code sein:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\r\n'
0
Ataboy Josef