Große Datenmenge aus csv in Datenbank lesen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Große Datenmenge aus csv in Datenbank lesen

Re: Große Datenmenge aus csv in Datenbank lesen

von Gabriel123 » Fr, 29.02.2008 15:23

Also das mit dem csv Datei Stücken war nicht so toll aber ich hab mir was zusammengebastelt was per schleife zeilenweise überträgt und so den Arbeitsspeicher in Ruhe lässt! Dauert zwar ein wenig aber so einen import macht man ja nicht alle Tage=)

Code: Alles auswählen

sub import
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("import")
Statement = Connection.createStatement()
iNumber = Freefile
aFile = "c:/analyse/04imp.csv" 'oControl.Text

Open aFile For Input As iNumber
While not eof(iNumber)

Input #iNumber, s01, s02
ResultSet = Statement.executeQuery("INSERT INTO ""Table""(""01"",""02"") VALUES('" & s01 & "','" & s02 & "')"
wend
Close #iNumber
end sub 

Re: Große Datenmenge aus csv in Datenbank lesen

von komma4 » Fr, 29.02.2008 12:26

Nehme Deinen "Standard-Editor unter Windows" und teile bei Zeile 30000, 60000, usw. ...

Notepad zeigt Dir eine Zeilenanzahl an (Ansicht>Statusleiste)...

Re: Große Datenmenge aus csv in Datenbank lesen

von Gabriel123 » Fr, 29.02.2008 11:08

habe mir das besagte Programm mal angesehen. Leider kann es nur nach Spalten splitten. Eine Möglichkeit die csv der Länge nach zu splitten ist scheinbar nicht möglich....also so dass jede datei dann 50.000 datensätze enthält oder so.

Re: Große Datenmenge aus csv in Datenbank lesen

von komma4 » Fr, 29.02.2008 10:27

Also, ich habe die MySQL Installation und Inbetriebnahme vor drei Wochen unter Windows XP in 15 bis 30 Minuten hinbekommen (inkl. Suchen eines Installationspaketes, Konfiguration und Verbindungsaufnahme von OOo über JDBC)...


Ja: ich dachte nicht daran, dass Du ja zwei Datenbanken hast.... Damit weiss ich nicht, ob eine Übertragung zustande kommen kann.

Und: Dein Hauptspeicher reicht aus, um die Daten in einem Editor anzuzeigen.
Das muss nicht heissen, dass OOo (und/oder) BASE das auch kann. Auch weiss ich nicht, in wie viele Transaktionen durch OOo ein solches Einlesen gesplittet wird....

...deshalb denke ich, dass momentan die einfachste Lösung ist:

Teile (die Daten) und (be-)Herrsche (die Datenbank)

Re: Große Datenmenge aus csv in Datenbank lesen

von Gabriel123 » Fr, 29.02.2008 08:51

Also ich habe eine normale HSQLDB angelegt über den Open Office Base Wizard. Mit MySQL DBs habe ich noch nie gearbeitet, deshalb weiss ich nicht ob mir ein schneller Umstieg gelingen würde. Aber ich werde mich mal nach Infos umschauen wie man eine MySQL DB anlegt und nutzt...ist sicher um einiges schneller...
komma4 hat geschrieben:2.:
hört sich gut an
[vielleicht geht das in einem Rutsch: INSERT into hsql.tabelle ( col1, col2, ..., colX ) VALUES (SELECT * FROM csv.tabelle ) ]
Dein Beispiel geht scheinbar davon aus, dass Tabelle hsql.tabelle und csv.tabelle in der gleichen DB angelegt sind. Oder? Ich habe es bisher nie geschafft in einer DB, die mit einer csv Datei als Quelle verknüpft ist eine weitere Tabelle anzulegen! Ich brauche also die Möglichkeit tabelle1(mit csv verknüpft->nur lesezugriff) aus DB1 in Tabelle2 in DB2 zukopieren.

Die Datei zerstückeln hatte ich nicht vor, ich kann sie ohne Probleme mit dem Windows Standard editor öffnen! Mein Arbeitsspeicher sollte also damit klar kommen.

Re: Große Datenmenge aus csv in Datenbank lesen

von komma4 » Do, 28.02.2008 17:49

2.:
hört sich gut an
[vielleicht geht das in einem Rutsch: INSERT into hsql.tabelle ( col1, col2, ..., colX ) VALUES (SELECT * FROM csv.tabelle ) ]

3. die CSV-Quelle mit einem geeigneten CSV-Editor in "handliche" Häppchen zerlegen. Unter Windows evtl. CSVed

Was "handlich" ist - bestimmt Arbeitsspeicher des Rechners und Datensatz-Länge. Bekommst Du schnell durch Versuche heraus (5,10,20,50...tausend)

Viel Erfolg!


PS: Du hast meine Frage noch nicht beantwortet: hast Du einen HSQLDB-Server laufen...? Ich frage auch hier, weil:
die Daten sind in einem Base.odb Dokument ja eingebettet, wenn die interne HSQLDB engine genutzt wird. 150k records könnten sich da auch schnell unangenehm bemerkbar machen. Keine Ahnung: ich habe auf dem Feld noch keine Experimente gemacht,

Große Datenmenge aus csv in Datenbank lesen

von Gabriel123 » Do, 28.02.2008 16:27

Hallo,

ich habe vor eine csv Datei mit ca. 150.000 Datensätzen in eine Datenbank zu bekommen. Bisher habe ich den Import in eine HsqlDB über einen Texttable gemacht. Also Daten aus der datei in ein Texttable geladen und von dort in meine Tabelle. Bei vielen Daten kommt es aber dann irgendwann zum crash weil der TextTable immer im Cache gespeichert wird. Habe versucht mit cache_scale zu arbeiten aber auch das ergab nichts.

Hat jemand schon mal mit so großen daten gearbeitet? Ich hatte schon versucht die csv Datei als Quelle zu verknüpfen. das geht auch aber dann kann ich nicht drin schreiben und auch keine weiteren Tabellen in dieser Db anlegen.

2 Ideen habe ich ungefähr:
1. csv Datei Zeilenweise auslesen und zeile für Zeile in die Tabelle der DB schreiben.
2. Datenbank1 mit der csv Datei als Quelle verknüpfen. Aus Datenbank2 auf Tabelle in Datenbank1 zugreifen und zeilenweise übertragen.

Ideen? DANKE!=)

Nach oben