csv-Datenimport

Micha_Lü_84

Neuer Benutzer
Beiträge
3
Hallo zusammen,

ich bin kompletter Neuling was SQL angeht und würde gerne eine Excel-csv Datei via Workbench importieren.
Leider kann ich nicht sehen, ob die Daten über den Weg erfolgreich eingelesen wurden.

Über den Import-Assistenten (Table Wizard) ging es aber bereits. Die aktuelle "Testdatei" dient nur zu meinem Verständnis des Importvorgangs (ist auch nicht in der 3. NF etc). Eigentlich möchte ich danach eine wesentlich größere csv-Datei einspielen. Mir würde es aber schonmal helfen, die Fehler "im Kleinen" zu verstehen.

Für den Importvorgang via Workbench habe ich mich an folgendem Tutorial orientiert:


Ich kann mir vorstellen, dass ich teilweise Definitionsfehler/Vertauschungen der Bezeichnungen von Database, Daten-Ordner, auszulesender csv-Tabelle (Excel) und anzusprechender SQL-Tabelle habe.

Die einzuspielende csv-Datei habe ich unter folgendem Pfad, in einem neuen Ordner "test" abgelegt:
C:\ProgramData\MySQL\MySQL Server 8.0\Data\test


Folgenden SQL-Code habe ich dazu in der Workbench geschrieben:

--------------------------------------------

use test;

Create Table test_stbl
(
Zahl1 INT,
Zahl2 INT,
Zahl3 INT,
Zahl4 INT,
Zahl5 INT,
Zahl6 INT,
Kombi1 VARCHAR(255),
Kombi2 VARCHAR(255),
Kombi3 VARCHAR(255),
Kombi4 VARCHAR(255)
);

SELECT*

FROM test.test_stbl;

LOAD DATA INFILE 'test_ctbl.csv' INTO TABLE test_stbl
FIELDS TERMINATED BY ','
IGNORE 1 LINES;

FROM test.test_ctbl;

--------------------------------------------


Im Tutorial ist zu sehen, dass die Daten im unteren Fenster sichtbar werden. Ich erhalte stattdessen jedoch nur Fehlermeldungen. Ich hänge meine Testdatei (csv), das Skript und Screenshots zu den Fehlern an.





Könnt ihr mir sagen, wo ich hier die Fehler (vielleicht Bezeichnungsfehler/-vertauschungen) habe?

Vielen Dank und viele Grüße
Michael
 

Anhänge

Werbung:
Willkommen im Forum!
Die Fehlermeldungen interpretiere ich so, dass zwar keine DB des Namens "test" existiert, wohl aber noch ein Dateisystemverzeichnis (vlt. nicht leer) existiert, das die Neuanlage verhindert.

create db if not exists
ist eigentlich dazu gedacht, eine bestehende DB zu nutzen. In diesem Fall ist es aber wohl inkonsistent. DB aus Serversicht ist gelöscht, auf Dateiebene noch vorhanden.

Du kannst das sicher auf Deinem System nachvollziehen und bereinigen. Oder, wenn Du faul bist, verwendest Du einen anderen Namen, der weder in der DB noch im Dateisystem bereits verwendet wird. "test2" ist sehr beliebt ;)

Die anderen Fehler dürften Folgefehler sein, da keine DB angelegt wurde.

Zum Importvorgehen würde ich generell raten, möglichst wenig / vorsichtig mit Excel zu arbeiten, weil es nach einigen Automatismen und Ländersettings manchmal undurchsichtige Datenänderungen (Formatierung) vornimmt.
Das Trennzeichen Komma ist gemäß Dateiendung zwar richtig, aber es ist recht problematisch, weil es auch in den Daten vorkommen kann.
Ich habe bessere Erfahrng mit Trennzeichen Tab gemacht, was nebenbei ganz von allein "entsteht", wenn man Exceldaten einfach per copy / paste in einen Texteditor einfügt. Feldbegrenzer für Strings sind dann u.U. gar nicht nötig.
 
Hallo dabadepdu,

vielen Dank schonmal für deine Hinweise und Tipps :) !

Habe die Importdatei in notepad geöffnet, als txt abgelegt und auch das Trennzeichen im Code geändert.

Ich hab eben mal den Datenordner "test" gelöscht -> danach konnte ich schon einen Unterschied sehen, dass er nicht mehr über die fehlende DB meckerte (also jeweils beim ersten Mal nach dem Löschen des Ordners). Analog dazu der Warnhinweis auf die (bereits) existierende Tabelle in SQL.

Danach ergibt sich jedoch noch eine Fehlermeldung "Error 1290" über die ich erstmal nicht hinaus komme. Google "weiß" dazu, dass es mit folgendem Ansatz gelöst werden müsste:

LOAD DATA INFILE​


<code class="sql">select @@GLOBAL.secure_file_priv;<code>

Könnte mir ggf. jemand sagen, wo/wie ich das eingeben muss, bzw. welcher ToDo dann zu machen ist, in Abhängigkeit von der Rückmeldung.


Vielen Dank und viele Grüße
Michael
 

Anhänge

  • Screenshot Workbench2.webp
    Screenshot Workbench2.webp
    80,6 KB · Aufrufe: 3
Habe die Importdatei in notepad geöffnet, als txt abgelegt und auch das Trennzeichen im Code geändert.
Also du hast die Datei umbenannt? Welcher Code?

Die Fehlermeldung deutet auf ein Rechteproblem hin. Ich nutze mysql/maria nicht, aber es hat sich auch da offenbar etabliert, dass man aus dem DB Server nicht auf beliebige Verzeichnisse des Hostfilesystems zugreifen kann.

Du musst in der INI Datei angeben, welche Verzeichnisse für einen Upload von Daten erlaubt sind. Oder Du schaust, was dort freigegeben ist und verwendest dieses bereits freigegebene Verzeichnis.
 
Werbung:
Ich denke, dass das System den Ordner nicht findet, indem die Text-Datei nun liegt.
Über den CLC habe ich den Pfad geprüft, der auf einen Ordner "Uploads" verweist:


mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| sys |
| test |
| world |
+--------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+------------------------------------------------+
| Variable_name | Value |
+------------------+------------------------------------------------+
| secure_file_priv | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
+------------------+------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql>


Ich hatte danach zunächst versucht, die als txt-Datei (via Notepad) abgespeicherte Importdatei in diesen Ordner, also: C:\ProgramData\MySQL\MySQL Server 8.0\Uploads

zu verschieben (sie liegt nun dort auch). Trotz Neustart werden die Daten aber immer noch nicht in die Tabelle übertragen.
Muss ich daher die "my.ini"-Datei verändern, und dort anstatt des Ordners "Uploads" den Ordner "test" einsetzen, damit die Importdaten aus dem richtigen Ordner gezogen werden?

An der wahrscheinlich entscheidenden Stelle (my.ini) steht was von:

---

# This variable is used to limit the effect of data import and export operations, such as
# those performed by the LOAD DATA and SELECT ... INTO OUTFILE statements and the
# LOAD_FILE() function. These operations are permitted only to users who have the FILE privilege.
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"

---

Muss ich da etwas dran ändern? Ich hatte diese Datei bereits in Notepad geöffnet und versucht die dort genannte Pfadendung:

..../Uploads

durch:

..../Data/test

zu ändern. Dies mündet aber beim Speicherversuch der Änderungen in eine Fehlermeldung, wegen Systemadmin-Rechten.


Wäre der Gedanke, die "my.ini"-Datei anzupassen denn grundsätzlich richtig (also Anpassung des Ordners auf ..."..../Data/test") bzw. wie/wo kann man dies durchführen?



Viele Grüße
Michael
 
Zurück
Oben