[db2] Laden eines csv-Files

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich möchte ein csv-File mittels LOAD-Befehl in meine Staging-Tabelle laden. Es gibt 2 Spalten in dem csv-File mit folgenden Einträgen:

"Bounce Rate";"Total Time"
"5.36%";"1 day 00:04:49"
"4.78%";"23:07:58"

Nachdem diese Einträge in dem Staging-Bereich sich befinden, werden diese Einträge weiterverarbeitet und landen dann in meine Fakten-Tabelle in dieser Form:

Bounce_Rate_% Total_Time
--------------------------------------
5.36 24:04:49
4.78 23:07:58


Wie kann ich dies erreichen?

1. Erster Schritt wäre die Einträge so zu laden, wie sie im csv-File aussehen? Dazu deklariere ich die Spalten Bounce_Rate_% und Total_Time mit varchar****
2. Wie verarbeite ich denn die varchar-Einträge in die gewünschte Endform wie oben?

Vielen lieben Dank für Eure Hilfestellungen.

Viele Grüße aus Rheinland,

Eure Ratna:)
 
Ich würde es in eine Staging-Tabelle schreiben mit varchar
Anschlissend umformatieren
Bounce Rate: DOUBLE(REPLACE())
Total Time: ggf mit TO_DATE()
 
Lieber Yaslaw,

danke für die rasche Antwort. Die Einträge von der Spalte Total_Time ist schwierig oder? Ich weiss nicht, wie ich von:
1 day 00:04:49
auf:
24:04:49

Der Datentyp TIME erlaubt nicht mehr als 24:00:00. Desweiteren, ich weiss nicht wie ich "1 day 00:04:49" per SQL-Ausdrücke in 24 Stunden umwandele.

Viele Grüße aus Rheinland,

Eure Ratna
 
Moin Ratna,

wie du richtig festgestellt hast, kennt DB2 zwar einen Datentyp TIME (ohne jeglichen Datumsanteil),dieser kann aber maximal bis 24 Std minus 1 Sekunde Daten anzeigen.

Wenn du also einen Tag ( oder 24 Stunden ) addierst, dann wird nur der Zeit-Anteil angezeigt, der unter 24h liegt.
SQL:
select  time('12:34:56') + 24 hours as testtime from sysibm.sysdummy1;

-> ergibt wieder die TIME 12:34:56 und nicht etwa 36:34:56.

Daher solltest du uns erstmal einen geeigneten Ziel-Datentypen für "Total Time" anbieten.
- Willst du es dezimal haben als 1,0 = Tag; 1,25 = 1 Tag 6 Std etc ?
- willst du es als Decimal haben, so wie DB2 normalerweise zwei Datums/Zeitdifferenzen als DECIMAL darstellt (denn einen INTERVAL-Datentyp wie in Oracle gibt es ja auch nicht)?
- oder willst du in deiner "Faktentabelle" eigentlich gar nicht mit diesen "Total time"-Werten rechnen, sondern diese nur anzeigen?

Im letzterem Fall ist es einfach - dann bleibt der Varchar ein Varchar.
Wenn du damit rechnen willst/musst, bleiben als Ziel-Datentyp Decimal-Wert/ Integerwert.
Ggf. musst du in deinen Berichten wieder in eine lesbare hh:mm:ss-Darstellung "umrechnen"

Was schwebt dir denn vor als Datentyp?

Grüße
Biber
 
Zuletzt bearbeitet von einem Moderator:
Zurück