[gelöst] SQL "load data infile" mit mehreren .txt aus ordner
[gelöst] SQL "load data infile" mit mehreren .txt aus ordner
hey,
ich habe einen ordner mit (teils bis zu mehreren hundert) .txt files diese möchte ich mit dem "LOAD DATA FILE" alle in den selben TABLE laden, habe allerdings derzeit keine ahnung wie ich dies bewerkstelligen soll. der befehl funktioniert mit einem file ganz gut, nur möchte ich eben den kompletten ordnerinhalt (mehrere .txt files) zugleich mit einem befehl laden, ohne diese alle namentlich angeben zu müssen.
bitte um hilfe und danke im voraus.
(debian 6, mysql, alle files (alle .txt) alle im selben ordner)
ich habe einen ordner mit (teils bis zu mehreren hundert) .txt files diese möchte ich mit dem "LOAD DATA FILE" alle in den selben TABLE laden, habe allerdings derzeit keine ahnung wie ich dies bewerkstelligen soll. der befehl funktioniert mit einem file ganz gut, nur möchte ich eben den kompletten ordnerinhalt (mehrere .txt files) zugleich mit einem befehl laden, ohne diese alle namentlich angeben zu müssen.
bitte um hilfe und danke im voraus.
(debian 6, mysql, alle files (alle .txt) alle im selben ordner)
Zuletzt geändert von carnage am 02.07.2012 09:29:00, insgesamt 1-mal geändert.
Re: SQL "load data infile" mit mehreren .txt aus ordner
Ich bin da möglicherweise nicht nah genug dran, aber in meiner Vorstellung willst du ein SQL-Skript, was irgendwelche Vorbereitungen macht und dann für jede Datei einen "LOAD DATA FILE"-Abschnitt hat. Richtig?
Oben, zwischen <<EOF und EOF kannst du irgendwelchen SQL-Krempel eintragen, der am Anfang stehen soll. find schreibt für jedes *.txt im aktuellen Verzeichnis rekursiv (!), also auch in Unterverzeichnissen (-maxdepth, siehe Manpage) einen Eintrag in's Skript.
Willkommen im Forum!
Gruß Cae
Code: Alles auswählen
$ cat mksql.sh
#!/bin/sh
cat >sql-script <<EOF
-- irgendwas hier
USE mydb -- oder so
EOF
find . -name '*.txt' -exec 'echo "LOAD DATA FILE {}" >>sql-script' \;
$
Willkommen im Forum!
Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: SQL "load data infile" mit mehreren .txt aus ordner
Hallo,
wenn die Daten der txt-Dateien alle in die gleiche Tabelle geschrieben werden sollen, müssen sie auch alle
die gleiche Struktur haben. Ein ganz simpler Ansatz wäre dann, die Dateien erst zu verschmelzen. Also etwa:
bzw. das über eine Schleife zu realisieren und sie dann in mysql einzulesen.
Gruß M.
wenn die Daten der txt-Dateien alle in die gleiche Tabelle geschrieben werden sollen, müssen sie auch alle
die gleiche Struktur haben. Ein ganz simpler Ansatz wäre dann, die Dateien erst zu verschmelzen. Also etwa:
Code: Alles auswählen
cat Daten1.txt Daten2.txt [...] > Datenkomplett.txt
Gruß M.
Re: SQL "load data infile" mit mehreren .txt aus ordner
hat sich erledigt. und so hats funktioniert:
trotzdem danke für die hilfe
Code: Alles auswählen
for item in `ls *.txt`
do
mysql --local-infile -u xxx --password="xxx"<< EOF
use xxx
LOAD DATA INFILE 'xxx/xxx/$item'
INTO TABLE xxx
FIELDS
TERMINATED BY ","
ENCLOSED BY ""
LINES TERMINATED BY "\n";
EOF
echo $item
done
Re: SQL "load data infile" mit mehreren .txt aus ordner
Hint: Das entsprichtcarnage hat geschrieben:Code: Alles auswählen
for item in `ls *.txt`
Code: Alles auswählen
for item in *.txt
Schön!carnage hat geschrieben:hat sich erledigt. und so hats funktioniert:
Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: [gelöst] SQL "load data infile" mit mehreren .txt aus or
Aber ein wichtiger Unterschied:Cae hat geschrieben: – da braucht man keine Subshell und kein ls.
Code: Alles auswählen
$ for i in `ls *.txt` ; do echo $i ; done
ls: Zugriff auf *.txt nicht möglich: Datei oder Verzeichnis nicht gefunden
$ for i in *.txt ; do echo $i ; done
*.txt
Mit der ls-Formulierung gibt wieder andere Probleme:
Code: Alles auswählen
$ for i in `ls *.txt` ; do echo $i ; done
aa.txt
bb.txt
cc
dd.txt
Code: Alles auswählen
ls *.txt && for i in *.txt ; do echo $i ; done
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")