Txt Datei in mysql importieren
Hi, Leute
habe mehrere txt Dateien auf einem FTP Server und möchte diese Daten in eine mysql DB auf einem anderen Server eintragen.
Die Dateien werden per Batch erzeugt und schauen so aus:
Wie kann ich die Daten trennen, da z.B. SHOP eigentlich schon die Spalte ist...?
habe mehrere txt Dateien auf einem FTP Server und möchte diese Daten in eine mysql DB auf einem anderen Server eintragen.
Die Dateien werden per Batch erzeugt und schauen so aus:
SHOP_123456, EINGANG:188600, AUSGANG:198128, BALANCE:-9528, ANZAHL:1113,
Wie kann ich die Daten trennen, da z.B. SHOP eigentlich schon die Spalte ist...?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 235200
Url: https://administrator.de/contentid/235200
Ausgedruckt am: 18.11.2024 um 07:11 Uhr
5 Kommentare
Neuester Kommentar
Verfügbare Betriebsysteme?
Unter Linux/Unix würde ich vorschlagen, die Datein per sed/awk zu bearbeiten.
Entweder komplette SQL-Statements aus den Zeilen bauen oder csv-Dateien mit den "reinen" Daten(also einfach "SHOP_" etc. durch "" ersetzen lassen) die dann per LOAD DATA [LOCAL] INFILE importiert werden.
Wobei zu testen wäre ob LOAD DATA LOCAL INFILE auf dem DB-Server erlaubt ist(http://dev.mysql.com/doc/refman/5.1/de/load-data-local.html)
Unter Linux/Unix würde ich vorschlagen, die Datein per sed/awk zu bearbeiten.
Entweder komplette SQL-Statements aus den Zeilen bauen oder csv-Dateien mit den "reinen" Daten(also einfach "SHOP_" etc. durch "" ersetzen lassen) die dann per LOAD DATA [LOCAL] INFILE importiert werden.
Wobei zu testen wäre ob LOAD DATA LOCAL INFILE auf dem DB-Server erlaubt ist(http://dev.mysql.com/doc/refman/5.1/de/load-data-local.html)
sed/awk ist nicht kompliziert ... das ist vieeeel einfacher als Textdateien per batch zu manipulieren ;) Es hängt halt immer davon ab was man zu Verfügung hat und was man beherrscht. Wenns nur Windows ist, dann würde ich sagen, Dateimanipulationen sind per Windows powershell komfortabler machbar als per batch.
Weiterhin ist die Performance zu betrachten. Wenn es wirklich viele Datensätze sind, dann lieber (wenn möglich) LOAD DATA LOCAL INFILE nutzen und keine einzelnen Insert-Statements. LOAD DATA ist wesentlich schneller.
Mit der Powershell sollte es etw so gehen(ganz quick&dirty ... ich bin nicht der powershell-freak, nehme lieber perl oder sed/awk wenn möglich):
(Get-Content datei.txt) | ForEach-Object { $_ -replace "SHOP_","" } | Set-Content datei.txt
(Get-Content datei.txt) | ForEach-Object { $_ -replace "EINGANG:","" } | Set-Content datei.txt
dann hätte man eine "saubere" CSV-Datei für load data .... genauso kann man die entsprechenden Bezeichnungen durch INSERT INTO-Fragmente ersetzen und so komplette SQL-Statements erzeugen.
Weiterhin ist die Performance zu betrachten. Wenn es wirklich viele Datensätze sind, dann lieber (wenn möglich) LOAD DATA LOCAL INFILE nutzen und keine einzelnen Insert-Statements. LOAD DATA ist wesentlich schneller.
Mit der Powershell sollte es etw so gehen(ganz quick&dirty ... ich bin nicht der powershell-freak, nehme lieber perl oder sed/awk wenn möglich):
(Get-Content datei.txt) | ForEach-Object { $_ -replace "SHOP_","" } | Set-Content datei.txt
(Get-Content datei.txt) | ForEach-Object { $_ -replace "EINGANG:","" } | Set-Content datei.txt
dann hätte man eine "saubere" CSV-Datei für load data .... genauso kann man die entsprechenden Bezeichnungen durch INSERT INTO-Fragmente ersetzen und so komplette SQL-Statements erzeugen.
Hallo,
https://dev.mysql.com/doc/refman/5.1/de/load-data.html
Du kannst einfach "," als Delimiter angeben ;)
Grüße
https://dev.mysql.com/doc/refman/5.1/de/load-data.html
Du kannst einfach "," als Delimiter angeben ;)
Grüße