Announcement

Collapse
No announcement yet.

LOAD DATA INFILE verliert Datensätze

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LOAD DATA INFILE verliert Datensätze

    Guten Tag zusammen,

    Ich bin neu hier und habe das Titelgebende Problem, dass ich mit dem

    Code:
    LOAD DATA LOCAL INFILE 'Lokaleer Datenträger/ganzviele Unterordner/lhistor.csv'
         INTO TABLE histor
         FIELDS TERMINATED BY ','
         OPTIONALLY ENCLOSED BY '"'
         LINES TERMINATED BY '\n'
         IGNORE 1 LINES;
    zwar die Hälfte der Datensätze einlesen kann, jedoch jede 2. Zeile übersprungen wird.
    Meine (in der Datei vorgegebenen) Primary Keys sehen statt
    so:
    1 2 3 4 5 6 7...

    so aus:
    1 3 5 7 10 12 14 16 18 21...

    und die dazugehörigen Datensätze werden auch nicht eingelesen. Wenn das nicht so viele (einige hunderttausend Datensätze) wären, würde ich den rest ja noch von Hand nachtragen. Hat hier vielleicht irgend jemand eine Idee wo der Fehler liegt und / oder wie ich diesen beheben kann?

    Ich nutze die GUI-Tools von MySQL und die MySQL Commandline, also kein XAMPP oder PHP.

    Vielen Dank im Vorraus.
    Mit besten Grüßen

    Alex
    Zuletzt editiert von 404 Name not found; 11.04.2016, 13:56.

  • #2
    Du hast tatsächlich eine UNIX-Datei zum einlesen?

    und die dazugehörigen Datensätze werden auch nicht eingelesen
    Das heiß was? Keine gelesene Zeile wird in die DB geschrieben?


    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
    Prüfe, ob nicht irgenwo Kommata oder Anführungszeichen sind, die die Datei unbrauchbar machen
    Christian

    Comment


    • #3
      Danke für die schnelle Antwort,

      zum Inhalt:
      1. Es werden zwar zusammenhängende Datensätze eingetragen, aber nur jeder zweite.
      Sprich in der Datei habe ich zeilen 1; 2; 3 ... in der eingelesenen Tabelle nurnoch 1; 3; 5...

      2. Die .csv Datei ist "tabelarisch", enthält noch die Spaltennamen und ist von meinem Praktikumsbetreuer, weshalb ich glaube, dass es eine UNIX datei ist

      3. Ich habe die ersten 10 Zeilen durchgeschaut. Die restlichen 707.579 schenke ich mir mal, da der Fehler bereits in den ersten paar Zeilen auftritt. In diesen 10 Zeilen ist mi kein Fehler aufgefallen. Ich würde sie ja hochladen, aber ich glaube das Rathhaus (Praktikumsstelle) wäre nicht so begeistert davon

      Ich habe auch schon Probiert, die erste Zeile einlesen zu lassen und die überflüssige Zeile der Spaltennamen in Kauf zu nehmen, hat jedoch weder das Muster des Überspringens, noch die Zeilen geändert, die wegfallen.

      Ich hab ganz vergessen zu erwähnen: System ist Win XP Profesional (32 bit), mit MySQL 5.0 Server

      Nochmals vielen Dank

      Alex

      Comment


      • #4
        1. Es werden zwar zusammenhängende Datensätze eingetragen, aber nur jeder zweite.
        Sprich in der Datei habe ich zeilen 1; 2; 3 ... in der eingelesenen Tabelle nurnoch 1; 3; 5...
        Das widerspricht deinem ersten Post
        1 2 3 4 5 6 7..
        und
        1 3 5 7 10 12 14 16 18 21...
        ist aber auch unwesentlich...

        Die .csv Datei ist "tabelarisch", enthält noch die Spaltennamen und ist von meinem Praktikumsbetreuer, weshalb ich glaube, dass es eine UNIX datei ist
        Warum prüfst du das nicht mit einem HEX-EDITOR, WELCHE UND WIEVIELE Bytes am Zeilenende stehen?

        Sofern es sich um Echtdaten handelt solltest du sie nicht weggeben.
        Da hier nun keiner die Tabellenstruktur kennt und auch keiner die Datei einsehen kann, wird es schwierig mit der Hilfe
        - Sollen Kommawerte in die Tabelle geschrieben werden und in der Textdatei ist ein , statt einem .
        - Sind Textfelder zu klein
        - Enthalten Textfelder Zeilenumbrüche
        - Stimmt die Anzahl der Columns mit der Anzahl der Spalten in der Datei
        ....
        Christian

        Comment


        • #5
          Du kannst das Logging bzw. Warning auf Server und Client Sitzung aktivieren und so ein direktes Feedback bekommen.
          Ich würde mir eine Handvoll Datensätze aus der großen Datei schnappen und sie selber editieren in Notepad mit Zeilenumbruch und damit testen.
          Gruß, defo

          Comment


          • #6
            Guten Morgen,

            danke euch beiden für die Ideen.

            @Christian: Der HEX Editor zeigt mir, dass die Zeilenumbrüche richtig sind (am Ende 0d 0a) und es werden auch nur Ganzzahlen eingelesen. Ich setzte meine Textfelder immer Standard mäßig auf VARCHAR(50), was ausreichend ist.Die Anzahl der Spalten und die der Columns sind identisch und es handelt sich nur um einzeilige Eingaben.

            @defo: Das wered ich gleich mal ausprobieren. Daran hab´ ich noch garnicht gedacht.

            Comment


            • #7
              Der HEX Editor zeigt mir, dass die Zeilenumbrüche richtig sind (am Ende 0d 0a)
              Nein, 0d0a ist ein Windowszeilenumbruch (2 Bytes). Somit ist das

              LINES TERMINATED BY '\n'

              zu prüfen ('\r\n')

              https://de.wikipedia.org/wiki/Zeilenumbruch
              Christian

              Comment


              • #8
                Hallo,

                Vielen Dank!!
                Mit (\r\n) habe ich alle Datensätze übernehmen können.
                Kann ich das Thema jetzt irgendwie als gelöst markieren?

                Wir lesen uns dann vielleicht im nächsten Thema..

                ein glücklicher
                Alex

                Comment

                Working...
                X