Hallo zusammen,
kennt sich hier jemand mit solchen Datenimporten über eine Stored Procedure aus?
Im Data Warehouse sollen vorhandene SQL-Server-Tabellen um neue/aktualisierte Datensätze erweitert bzw. aktualisiert werden. Der Abruf erfolgt über OPENQUERY(<Db2-LinkedServer>, <SELECT-Statement>).
Bisherige Überlegungen
Eigentlich klingt das alles mehr oder weniger trivial, aber ich steh gerade echt auf dem Schlauch
Vielleicht habt Ihr ja Tipps für mich, wie man soetwas am geschicktesten angeht...
kennt sich hier jemand mit solchen Datenimporten über eine Stored Procedure aus?
Im Data Warehouse sollen vorhandene SQL-Server-Tabellen um neue/aktualisierte Datensätze erweitert bzw. aktualisiert werden. Der Abruf erfolgt über OPENQUERY(<Db2-LinkedServer>, <SELECT-Statement>).
Bisherige Überlegungen
- Über 5 Mio. Datensätze, d.h. es dauert viel zu lange, immer alle Daten abzuholen, aber beim initialen Befüllen der SQL-Tabelle muss es eben sein.
- Wie bekommt man das möglichst schnell, aber auch zuverlässig hin?
- Irgendwelche Ideen, wie man die Abfrage parallelisieren könnte?
- Die Abfrage darf angeblich nicht alle Datensätze auf einmal abholen, da es sonst zu Abstürzen/Instabilitäten kommen könnte. Ist das üblich? Gibts dafür gängige Größen, wie viele Datensätze man abrufen kann?
- Was nimmt man hinsichtlich Performance (und Parallelisierungsmöglichkeit) am besten? - SELECT ... INTO, INSERT, MERGE, ...?
- Die SQL-Tabelle soll täglich um etwa 10000 neue/geänderte Datensätze aktualisiert werden. Die Datensätze haben eine eindeutige ID und einen Timestamp mit dem Zeitpunkt der letzten Änderung.
- Wie hole ich nur geänderte Datensätze ab, um diesen Prozess möglichst effizient zu gestalten? Würden nur neue Datensätze dazukommen, könnte man einfach alle abrufen, deren ID größer ist, als die maximale ID in der Ziel-Tabelle. Allerdings können auch ältere Datensätze geändert werden. Wie gehe ich hier vor, ohne jedes mal alle 5 Mio. Datensätze auf geänderte Timestamps vergleichen zu müssen? - Wäre hier vielleicht einfach ein MERGE beider Tabellen die beste Lösung? Oder gibts andere? Mir graut es davor, alle gefühlt 50 Spaltenbezeichnungen im MERGE-Statement angeben zu müssen, obwohl es um identisch aufgebaute Datensätze geht...
- Auch hier spielen natürlich wieder Parallelisierung und "häppchenweiser Datenabruf" eine Rolle.
Eigentlich klingt das alles mehr oder weniger trivial, aber ich steh gerade echt auf dem Schlauch

Vielleicht habt Ihr ja Tipps für mich, wie man soetwas am geschicktesten angeht...
