Datenimport

TizianK

Benutzer
Beiträge
16
Guten Morgen,

ich habe heute eine etwas komplexere Anfrage. Es geht darum, dass ich eine .txt Datei in folgendem Format habe:

Code:
Anrede,Name,Vorname,Geburtsdatum,Ort,Plz (...)
Herr,Mustermann,Max,01.01.1985,Musterstadt,12345 (...)
Frau,Musterfrau,Maria,01.01.1980,Musterstadt,54321 (...)
(...)

Alle vorhandenen Zeilen möchte ich in die passenden Tabellen und Spalten in meiner Datenbank einbinden.
Da es sehr sehr viele Zeilen sind möchte ich ein Script erstellen, welches sich automatisch die Daten aus der .txt Datei zieht und diese in die Datenbank einfügt.

Ich könnte das natürlich per
Code:
INSERT INTO (...) 
VALUES (...)
bewerkstelligen, jedoch müsste ich dafür jede einzelne Zeile händisch in meine Abfrage einfügen. Das wäre extrem aufwendig, denn ich muss mindestens 50 Spalten pro Datensatz einfügen.

Gibt es eine Möglichkeit ein Script, wie oben beschrieben, zu erstellen? Wie stelle ich das an, dass der Server auch "versteht", welche Datensätze aus den verschiedenen Tabellen zusammengehören?

Liebe Grüße,
Tizian
 
Werbung:
Das geht normalerweise sehr viel einfacher und auch schneller., indem Du das als CSV-Datei importierst.

Angenommen, ich habe in /tmp/tizian.txt stehen:

Code:
Anrede,Name,Vorname,Geburtsdatum,Ort,Plz
Herr,Mustermann,Max,01.01.1985,Musterstadt,12345
Frau,Musterfrau,Maria,01.01.1980,Musterstadt,54321

und diese Tabelle:

Code:
test=# create table tizian(anrede text, name text, vorname text, geburtsdatum text, ort text, plz text);
CREATE TABLE

so kann ich das einfach via COPY laden:

Code:
test=# copy tizian from '/tmp/tizian.txt' csv delimiter ',' header;
COPY 2
test=*# select * from tizian ;
 anrede |  name  | vorname | geburtsdatum |  ort  |  plz  
--------+------------+---------+--------------+-------------+-------
 Herr  | Mustermann | Max  | 01.01.1985  | Musterstadt | 12345
 Frau  | Musterfrau | Maria  | 01.01.1980  | Musterstadt | 54321
(2 Zeilen)

Mich stört nun nur noch der Datentyp für geburtsdatum:

Code:
test=*# alter table tizian alter column geburtsdatum type date using(to_date(geburtsdatum,'dd.mm.yyyy'));
ALTER TABLE
test=*# \d tizian 
  Tabelle »public.tizian«
  Spalte  | Typ  | Attribute
--------------+------+-----------
 anrede  | text |
 name  | text |
 vorname  | text |
 geburtsdatum | date |
 ort  | text |
 plz  | text |


Voila, fertig.
 
Werbung:
Bei MSSQL wäre die simpelste Mehtode BULK:
Code:
CREATE TABLE rohdaten(
   Anrede VARCHAR(10),
   Name VARCHAR(100),
   Vorname VARCHAR(100),
   Geburtsdatum VARCHAR(12),
   Ort VARCHAR(100),
   Plz VARCHAR(10)
   );


BULK INSERT rohdaten
FROM   'd:\Daten.txt'
WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n');

SELECT   *
FROM   rohdaten
WHERE   Plz != 'Plz'
Natürlich muss in der Zieltabelle die Anzahl der Spalten passen und da die erste Zeile auch mit importiert wird kann man hier auch noch nicht viel mit Formaten sinnvolles tun. Daher sollte diese Rohdatentabelle dann unbedingt in eine vernünftige Tabelle überführt werden.
 
Zurück
Oben