mysql LOAD DATA LOCAL INFILE
Kermit
- datenbank
Hallo zusammen,
ich möchte ein lokales File in eine leere DB importieren.
Dabei ist zu beachten:
Mein erstes Bsp. unten funktioniert (vollimport ohne zusätzliche und umgetauschte Spalten).
Im zweiten Versuch bekomme ich die Meldung:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use n
ear 'TERMINATED BY ';' LINES TERMINATED BY '\n'' at line 8
-- myfile1.txt Import File ohne COL_x
COL_1;0;COL_4;COL_3
a1;100;a4;a3
b1;200;b4;
c1;300;;c3
d1;301;d4;d3
-- myfile2.txt Import File
COL_1;COL_x;0;COL_4;COL_3
a1;ax;100;a4;a3
b1;bx;200;b4;
c1;cx;300;;c3
d1;dx;301;d4;d3
--
-- Tabellenstruktur für Tabelle mapping\_test
--
CREATE TABLE IF NOT EXISTS mapping\_test
(
FELD\_1
text COLLATE latin1_german1_ci COMMENT 'Feld 1',
FELD\_2
int(11) NOT NULL COMMENT 'Feld 2, Primary key',
FELD\_3
text COLLATE latin1_german1_ci COMMENT 'Feld 3',
FELD\_4
text COLLATE latin1_german1_ci COMMENT 'Feld 4',
FELD\_5
text COLLATE latin1_german1_ci COMMENT 'Feld 5',
FELD\_6
text COLLATE latin1_german1_ci COMMENT 'Feld 6',
PRIMARY KEY (FELD\_2
)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
-- BSP funktioniert
LOAD DATA LOCAL INFILE 'myfile1.txt'
INTO TABLE mapping_test
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n';
-- BSP fehlerhaft
LOAD DATA LOCAL INFILE 'myfile2.txt'
INTO TABLE mapping_test (val1, @dummy, val2, val3, val4)
SET
FELD_1=val1,
FELD_2=val2,
FELD_3=val4,
FELD_4=val3,
FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';
Vielen Dank und Grüße
Kermit
Hi,
Im zweiten Versuch bekomme ich die Meldung:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TERMINATED BY ';' LINES TERMINATED BY '\n'' at line 8
Und was steht vor FIELDS TERMINATED BY, was da nicht hingehört?
FELD\_4=val3,
FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';
MfG ChrisB
Danke damit funz:
LOAD DATA LOCAL INFILE 'myfile2.txt'
INTO TABLE mapping_test
FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'
IGNORE 1 LINES
(val1, @dummy, val2, val3, val4)
SET
FELD_1=val1,
FELD_2=val2,
FELD_3=val4,
FELD_4=val3,
;
Ein Problem habe ich noch. Ich möchte Leerzeichen nicht in der DB importieren sondern mit NULL ersetzen.
Grüße
Kermit
Hi,
Ein Problem habe ich noch. Ich möchte Leerzeichen nicht in der DB importieren sondern mit NULL ersetzen.
Das wäre mit LOAD DATA INFILE zwar theoretisch möglich (siehe Beschreibung der SET-Clause in der Beschreibung im Manual) - aber du müsstest es für jede Spalte einzeln machen.
Wenn du das nach dem Einlesen mittels UPDATE machst, natürlich ebenfalls.
Bessere wäre es, wenn du solche „Leerzeichen“ (dass du das noch genauer spezifizieren musst, sollte klar sein) schon in der Eingabedatei durch NULL bzw. \N ersetzen würdest (auch dazu, wie genau damit unter welchen Umständen umgegangen wird, siehe Manual).
MfG ChrisB