3 GB Große CSV Datei einlesen und in SQL-DB schreiben

TJava

Bekanntes Mitglied
Hallo wie der Titel vermuten lässt möchte ich eine ca. 3Gb große CSV Dateien mit Java(FX) einlesen und in eine MySql-Db schreiben.

Ich dachte mir bisher das ich diesen Parser verwende:
opencsv - Frequently Asked Questions

Ich frage mich ob das alles so klappt und ob es Probleme geben kann?

Gibt es einen leichteren bzw. anderen Weg CSV-Dateien in eine DB zu schreiben?

Die Dateien werden eine recht simple Datenstruktur haben:
9 Spalten und halt millionen von Zeilen.

Ich danke euch für eure Erfahrungen und hinweise für evenutelle Probleme die auftreten können.

MfG

TJava
 

Marco13

Top Contributor
Solange man nicht versucht, die Datei am Stück in den Speicher zu lesen, dürfte das kein Problem sein. Wie das mit dem schreiben aussieht ... da kenn' ich mich nicht aus... Das würde man ja nicht Zeilenweise machen, sondern schon mit "chunks" die aus mehreren Zeilen bestehen (... oder? Ist nur geraten...)
 
G

Gast2

Gast
Moin,

sondern schon mit "chunks" die aus mehreren Zeilen bestehen (... oder? Ist nur geraten...)
nein ist richtig. ZAT (Signatur) ging mal über 2 Stunden, Background ist eine mySQL-DB. Nach dem Umstellung nur noch ca. 5 Minuten. Neben dem Laden aller Daten am Anfang wurde auch am Ende erst alle Ändernung gespeichert. Dazwischen blieb alles drinn.

Lange Rede, kurzer Sinn - die Daten werden am Ende in Blöcken von 1000 Zeilen gespeichert. Ob das Sinn macht, muss aber von DB zu DB entschieden werden. MySQL frisst kaum Speicher, das geht aber nur wenn die Daten gleich auf Pladde gespeichert werden. MsSQL frisst Speicher soviel es geht und den Datenverkehr zur Pladde zu reduzieren (merkt sich die Ergebnisse der letzten Querys). Da kann es sein das es keinen Unterschied macht ob die Datensätze einzeln oder in Chunks ankommen.

hand, mogel
 

TJava

Bekanntes Mitglied
Hey Danke das ist schon mal super:)

Wie sieht es aus mit den Tabellenfeldern, müssen die String sein?
also bei double und int bekomme ich, nach dem ersten kleinen Testlauf Fehler.

LOAD DATA INFILE 'C:/Dokumente und Einstellungen/Jacky/Desktop/CSV_Projekt.csv' INTO TABLE Lauffeder.csv_import FIELDS TERMINATED BY ';' IGNORE 1 LINES;

Data truncated for column 'Sensor1' at row 1 0.000 sec
 

Evil-Devil

Top Contributor
Für deinen Import sollten alle Felder Varchar sein. Ausgehend vom Import kannst du die Daten dann in die jeweiligen Ziel-Tabellen schreiben und ggf. vorher manipulieren.
 

TJava

Bekanntes Mitglied
Danke für den Tipp.

Also meine Tabelle sieht nun so aus:

ID | Timestamp | Sensor1 |Sensor2|...|Sensor8


Ist es auch möglich, die ID halt per Auto Increment setzen zu lassen und die Daten einzutragen?

In der CSV-Datei steht allerding die Idee nicht und so bekomme ich den Fehler das nicht genug Daten enthalten sind um die Zeile zu füllen.

MfG
 

TJava

Bekanntes Mitglied
Hey noch eine Frage gleich hintern dran :D

Habe nun eine Klasse erstellt die Connection funktioniert soweit.
Allerdings ist irgendwo ein Standardpfad gesetzt oder sowas, wo SQL die Dateien erwartet.
Wo kann man diese Einstellung bearbeiten?
Verstehe ich nicht da das Statement wenn ich es in der SQL Workbench ausführe auch so funktioniert.



java.sql.SQLException: File 'C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\MySQL\MySQL Server 5.5\Data\Dokumente und EinstellungenJackyDesktopCSV_Projekt.csv' not found (Errcode: 2)



Java:
 try {
            Connection conn = getConnk.getConnection();
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Statement st = (Statement) conn.createStatement();

            String tableName = "csv_import";
            System.out.println(this.file.getPath());
            //LOAD DATA INFILE 'C:/Dokumente und Einstellungen/Jacky/Desktop/CSV_Projekt.csv' INTO TABLE Lauffeder.csv_import FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 ROWS ;
            st.executeUpdate("LOAD DATA INFILE \"" + this.file.getPath() + "\" INTO TABLE  Lauffeder.csv_import FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 ROWS");
        } catch (Exception e) {
            e.printStackTrace();
        }


        return 0;
 

Evil-Devil

Top Contributor
Auto ID Anreicherung beim Load Data Import habe ich nie probiert und sollte nach meinem Wissensstand auch nicht funktionieren, da Load Data keine Spaltennamen entgegen nimmt und somit die vollständige Tabellenbreite als Ziel definiert. Also einfach direkt importieren und wenn du dann noch eine Auto ID benötigst musst du die Daten in eine weitere Tabelle übertragen.

Die Quelldatei die eingelesen werden soll kann überall liegen, wichtig ist nur das der Pfad erreichbar ist und etwaige Sonderzeichen escaped übergeben wurden sodass am Ende ein gültiger Pfad bei heraus kommt. Deine Pfad-Angabe sieht auch irgendwie komisch aus. Zweimal Dokumente und Einstellungen, bist du dir sicher das es so korrekt ist?
 

TJava

Bekanntes Mitglied
Hallo,

die frage ist ja warum der Pfad so ausgegeben wird?

System.out.println(this.file.getPath()) gibt den Pfad richtig aus.

SQL:
st.executeQuery("LOAD DATA LOCAL INFILE \"" + this.file.getAbsolutePath() + "\" INTO TABLE  Lauffeder.csv_import FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 ROWS");

Das liefer das gleiche ergebnis aus irgendeinem Grund werden alle \ aus dem Pfad gelöscht.

:(
 
Zuletzt bearbeitet:

Aiwendil

Mitglied
Musst du die Datei unbedingt per Java laden? Wenn nicht geh doch über die sql-Konsole und gib die Query direkt ein.

die kriegst du so:
Eingabeaufforderung:
Code:
%MYSQL_SERVER%/bin>mysql -u username [-p]
mit username beim mysql server anmelden (falls ein passwort gesetzt ist muss du noch -p hinzufügen, nach dem enter drücken kannst du dann das PW eingeben)
 

TJava

Bekanntes Mitglied
Java:
String filepath = this.file.getAbsolutePath();
            filepath = filepath.replace("\\", "\\\\");

Wenn ich dann folgendes mache läuft es.

Java:
            st.executeQuery("LOAD DATA LOCAL INFILE \"" + filepath + "\" INTO TABLE  Lauffeder.csv_import FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 ROWS");

Danke für die Hilfe. Bis demnächst :p
 
G

Gast2

Gast
aus irgendeinem Grund werden alle \ aus dem Pfad gelöscht.

wenn Du Backslash behalten willst, dann musst du die auch escapen

SQL:
st.executeQuery("LOAD DATA LOCAL INFILE \"" + this.file.getAbsolutePath() + "\" INTO TABLE  Lauffeder.csv_import FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\n' IGNORE 1 ROWS");

interessanter weise machst Du genau das bei deinem replace
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Große Datei in MySQL importieren Datenbankprogrammierung 10
M Problem: Große Datei in MySQL DB importieren. Datenbankprogrammierung 12
R Große Datensätze, kleine Rechte Datenbankprogrammierung 8
Joew0815 Datenmerge große Tabelle Datenbankprogrammierung 16
E MySQL Große Datenmengen reibungslos speichern für Gameserver Datenbankprogrammierung 6
L Große Datenbanken - Designproblem Datenbankprogrammierung 3
P Embedded Database und große Datenmengen Datenbankprogrammierung 23
A Große Datenmengen mit JPA 2.x verarbeiten Datenbankprogrammierung 13
A Große Objekte mit JPA und Hibernate Datenbankprogrammierung 3
S Zugriff auf eine große Datenmenge von MS Access per JDBC Datenbankprogrammierung 11
F JAVA und große Datenabfragen Datenbankprogrammierung 7
R hsqldb: performance, große tabellen und so Datenbankprogrammierung 10
rambozola große anzahl an inserts bei oracle db unperformant Datenbankprogrammierung 15
T Große Datenmenge bei DB- Abfrage Datenbankprogrammierung 5
M Datenbank Zugraff nach Umwandlung in .jar-Datei nicht mehr möglich Datenbankprogrammierung 4
D H2 schema-Datei ausführen Datenbankprogrammierung 22
L Oracle SQL Inserts via Client vs SQL Datei via ScriptRunner Datenbankprogrammierung 6
J JAR-Datei und Datenbank Datenbankprogrammierung 8
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
L CSV Datei mit DB Inhalt vergleichen Datenbankprogrammierung 20
F Auslesen einer .dbf-Datei, Zuordnung Index Datenbankprogrammierung 0
T Datei auf Desktop ausgeben Datenbankprogrammierung 22
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
M HSQLDB .Script-Datei entfernen oder sperren Datenbankprogrammierung 18
M MySQL JSON-Datei auf Datenbank anwenden Datenbankprogrammierung 17
V SQLite Performance: 1 Datei mit einzelnen Einträgen gegenüber SQLite Datenbankprogrammierung 7
M Verbindung von Java Programm zur Acccess Datenbank (mdb-Datei) Datenbankprogrammierung 0
J SQL Datei einlesen/beschreiben Datenbankprogrammierung 0
F JPA persistence.xml mit EXTERNER Config Datei Datenbankprogrammierung 0
C VDF Datei als Datenbank genutzt!!! Datenbankprogrammierung 5
L SQL2SMO JAR-Datei zum Laufen bringen Datenbankprogrammierung 0
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1
P Derby/JavaDB Csv Datei für dieses Musterprogramm Datenbankprogrammierung 12
D [xBaseJ] Datei kann nicht geöffnet werden Datenbankprogrammierung 2
L Werte in Datei speichern Datenbankprogrammierung 16
D Datenbank oder XML Datei Datenbankprogrammierung 3
M HSQLDB oder DERBY - warum SCRIPT Datei? Datenbankprogrammierung 0
S SQL-Abfrage, Filewriter .txt Datei Datenbankprogrammierung 2
T Datei import und Datumsformat Datenbankprogrammierung 4
D Derby Datenbank bei Export zu JAR-Datei nicht möglich Datenbankprogrammierung 8
K SQLite CSV-Datei einlesen in eine Datenbank Datenbankprogrammierung 7
E csv datei in JTable einlesen Datenbankprogrammierung 3
E Datei Zippen und an DB schicken Datenbankprogrammierung 7
N Oracle txt. Datei auslesen-> verändern-> einlesen Datenbankprogrammierung 7
I Zugriff auf Datenbank nach Erstellen einer Executable Jar Datei verweigert Datenbankprogrammierung 10
D MySQl Treiber in .jar Datei einbinden, Bukkit Datenbankprogrammierung 2
M Datenbank-Datei Datenbankprogrammierung 10
bluerob MimeMessage .getFrom()[0]; liest eml-Datei nicht Datenbankprogrammierung 7
achillesat ausgelesene Datei in Datenbank schreiben Datenbankprogrammierung 9
O MySQL sql Datei einzelner Tabellen erzeugen (über Java Programm) Datenbankprogrammierung 6
H Derby SQL-Abfragen in Datei abspeichern Datenbankprogrammierung 2
S passwortgeschützte Excel-Datei einlesen Datenbankprogrammierung 3
S Schnellste Methode Datei aus Datenbank herstellen Datenbankprogrammierung 7
C XLS Datei aus Datenbank erstellen Datenbankprogrammierung 14
H Datenbank in Datei speichern / laden Datenbankprogrammierung 8
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
H CSV Datei in MSSQL DB oder doch SQL Script Datenbankprogrammierung 11
N Problem mit dem Importieren der csv- u. txt-Datei Datenbankprogrammierung 3
Dragonfire Daten aus jsp Datei in datenbank speichern Datenbankprogrammierung 15
M Tabelle in Access Datei mit JDBC generieren Datenbankprogrammierung 3
N csv datei erstellen Datenbankprogrammierung 2
S BLOB in Datei speichern Datenbankprogrammierung 8
S projektplanung mit csv datei Datenbankprogrammierung 2
M Gelöst: JavaDB - Derby Inhalt in Jar Datei speichern Datenbankprogrammierung 5
K jar Datei startet nicht aufgrund Firebird(?) Datenbankprogrammierung 3
D Access Datenbank in .jar-Datei Datenbankprogrammierung 51
H Wie kann ich eine Datenbank Connection aus XML-Datei lesen! Datenbankprogrammierung 2
M H2 DAtenbank in .sql datei schreiben/abfragen ? Datenbankprogrammierung 3
A Auslesen von Werten aus der DB in eine csv-Datei Datenbankprogrammierung 4
T Wie kann ich Blobs (Bilder) in einer Datei speichern? Datenbankprogrammierung 2
A Auslesen aus einer csv-Datei Datenbankprogrammierung 2
A Einlesen einer csv-Datei in eine H2-Datenbank Datenbankprogrammierung 3
A Probleme beim Schreiben in eine CSV-Datei aus einer H2-DB Datenbankprogrammierung 2
G Import einer csv-Datei in eine H2-Database Datenbankprogrammierung 12
N csv datei in PostgreSQL datenbank einlesen Datenbankprogrammierung 1
M Mit Java .txt-Datei in eine Datenbank einlesen lassen Datenbankprogrammierung 33
ARadauer datenbank in datei sichern Datenbankprogrammierung 4
B HSQLDB und die log-Datei Datenbankprogrammierung 10
S [Hibernate] Map in Map - Wie sieht Mapping Datei aus? Datenbankprogrammierung 10
F Probleme mit Jar Datei Datenbankprogrammierung 3
T Datei (Blob) mit verknüpfter Software öffnen? Datenbankprogrammierung 4
P ODBC verbindung Java soll auf access mdb datei zugreifen Datenbankprogrammierung 2
S SQLite oder RDBMS als Datei(nicht Client/Server) Datenbankprogrammierung 5
G .jar - Datei erzeugen (Was beachten?) Datenbankprogrammierung 2
R Mit JAR-Datei ist MySQL-Treiber nicht auffindbar Datenbankprogrammierung 10
Y Problem mit Ablage einer Datei in einer Datenbank als BLOB Datenbankprogrammierung 6
Trèfle Adobe Acrobat Indexdatei (.PDX File) einlesen Datenbankprogrammierung 1
T importierte Derby DB währen der Laufzeit einlesen Datenbankprogrammierung 2
I Access Datenbank in Table einlesen lassen Datenbankprogrammierung 2
E csv einlesen in H2 DB Datenbankprogrammierung 4
Mike90 PDFs in Blobs einlesen Datenbankprogrammierung 7
M Bild schreiben und einlesen Datenbankprogrammierung 2
B MySQL-Dumpdatei ohne Batchdatei wieder einlesen Datenbankprogrammierung 48
A Daten von Webshop einlesen Datenbankprogrammierung 5
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
T MySQL Datenbankennamen einlesen Datenbankprogrammierung 7
T Datensätze effektiv einlesen Datenbankprogrammierung 4
G ResultSet: String mit Anführungszeichen einlesen Datenbankprogrammierung 8
D Datum in SQL-Datenbank einlesen Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben