Tabellenimport per SSIS

29/05/2009 - 10:12 von Irmgard Schwenteck | Report spam
Hallo,

ich stehe vor dem Problem, einige Tabellen auf dem SQL-Server regelmàßig
zu aktualisieren.
Diese sind über einen ODBC-Treiber erreichbar.

Gibt es eine Entsprechung zum MySQL
INSERT INTO ... ON DUPLICATE KEY REPLACE?

Es gibt zwar Primàrschlüssel in den Tabellen, aber nichts, wo man eine
zeitliche Reihenfolge der Eingaben entnehmen könnte.
Also nix mit "bis IDnummer 12435 ist schon importiert"

Bereits importierte Datensàtze können im nachhinein auch geàndert worden
sein.
Einige Tabellen könnte ich einfach löschen und neu importieren. Die sind
von der Größe her noch moderat.
Wo kann ich im VisualStudio sowas wie "truncate Table" einfügen?


Bei einer Tabelle sind es aber schon > 12 Mio Datensàtze, da dauert der
Import von nur einem Monat schon ein paar Stunden (geht über ISDN).
Da kann ich nicht jedesmal alles neu einlesen.

Es gibt eine Spalte mit einem "Archivflag".
Wenn dort z.B. eine 4 drinsteht, kann der Datensatz nicht mehr geàndert
werden.
d.h. ich könnte alle Datensàtze ausschließen, die
1. auf Quell und Zielzeite existieren
2. beide den Wert 4 in dieser Spalte haben
und den Rest - entweder dranhàngen oder überschreiben
Wie kann man das mit SSIS lösen?

Und kann man bei den Eigenschaften noch irgendwo etwas beschleunigen?
Bei Accessmode steht z.B. "OpenRowset"
Der Import soll sowieso nachts laufen, wo keiner damit arbeitet.

Gruß
Irmgard
 

Lesen sie die antworten

#1 Christa Kurschat
29/05/2009 - 10:45 | Warnen spam
Hallo Irmgard,

"Irmgard Schwenteck" schrieb im Newsbeitrag
news:
Hallo,

ich stehe vor dem Problem, einige Tabellen auf dem SQL-Server regelmàßig
zu aktualisieren.
Diese sind über einen ODBC-Treiber erreichbar.




Muß es zwingend ODBC ein? Das ist grottenlangsam.

Gibt es eine Entsprechung zum MySQL
INSERT INTO ... ON DUPLICATE KEY REPLACE?




Nein, nicht so direkt.
Man könnte die SCD dazu mißbrauchen, abe rnicht bei vielen Daten. Schon
100.000 waren da zu langsam.

Es gibt zwar Primàrschlüssel in den Tabellen, aber nichts, wo man eine
zeitliche Reihenfolge der Eingaben entnehmen könnte.
Also nix mit "bis IDnummer 12435 ist schon importiert"

Bereits importierte Datensàtze können im nachhinein auch geàndert worden
sein.
Einige Tabellen könnte ich einfach löschen und neu importieren. Die sind
von der Größe her noch moderat.
Wo kann ich im VisualStudio sowas wie "truncate Table" einfügen?




Task "SQL ausführen"


Bei einer Tabelle sind es aber schon > 12 Mio Datensàtze, da dauert der
Import von nur einem Monat schon ein paar Stunden (geht über ISDN).
Da kann ich nicht jedesmal alles neu einlesen.




Das wird schwieriger.

Es gibt eine Spalte mit einem "Archivflag".
Wenn dort z.B. eine 4 drinsteht, kann der Datensatz nicht mehr geàndert
werden.
d.h. ich könnte alle Datensàtze ausschließen, die
1. auf Quell und Zielzeite existieren
2. beide den Wert 4 in dieser Spalte haben
und den Rest - entweder dranhàngen oder überschreiben
Wie kann man das mit SSIS lösen?




Um das komplette Einlesen kommst m.E. Du nicht rum.

ID', die Du noch nicht hast, ließen sich über die Suche herausfinden und
schreiben.
Die Du schon hast, wàre ebenfalls über die Suche und dann ein
Update-Statement möglich.

Wie Performant das Ganze ist, kann ich leider nicht sagen.

Besser wàre in jedem Fall, bei der Datemnege schon auf dem Quellsystem Daten
auszuschließen.

Und kann man bei den Eigenschaften noch irgendwo etwas beschleunigen?



Nicht das ich wüßte. ODBC ist nun mal langsam.
Oledb oder Flatfile wàre sehr viel schneller. Da wàren 12 Mio Sàtze kein
Thema.

Gruß
Christa
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
InsideSql: www.insidesql.org

Ähnliche fragen