Kermit: mysql LOAD DATA LOCAL INFILE

Hallo zusammen,

ich möchte ein lokales File in eine leere DB importieren.
Dabei ist zu beachten:

  • Spalte 1 soll importiert werden
  • Spalte 2 ist zu ignorieren
  • Spalte 3 soll importiert werden (ist PK)
  • Spalte 4 und 5 sollen importiert aber in der Reihenfolge getauscht werden
  • die DB kann auch weitere Felder beinhalten die aber leer bleiben sollen (NULL)
  • Leerstellen sollen mit NULL ersetzt werden

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

  1. 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

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. 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

      1. 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

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?