Fragensteller
SSIS: Detaildatensätze aus anderer Datenbank auslesen

Frage
-
Hallo zusammen,
wir haben folgendes Problem bei der Modellierung eines Integration Services-Projekt: Es sind zwei Datenbanken vorhanden. In der einen werden die Kopfdaten zu Belegen gespeichert. In der Anderen jeweils die passenden Positionen dazu. Wir möchten nun gerne einen Ausschnitt der Kopfdaten auslesen und nur die dazu passenden (benötigten) Detaildatensätze aus der anderen Datenquelle hinzufügen.
Dies wäre zwar grundsätzlich mit dem Merge Join-Element möglich, wofür aber sämtliche Detaildatensätze vor der Merge Join-Operation vollständig eingelesen werden. Es sollen jedoch aus Performance-Gründen nicht sämtliche Datensätze der Detailtabelle vor dem Merge-Join eingelesen werden, sondern nur die, welche zu dem Ausschnitt der Kopfdaten gehören. Dieses Problem lässt sich leider nicht mit dem Lookup-Element lösen , da dieses Steuerelement nur die Treffer findet, jedoch keine Verknüpfung der Daten vornehmen kann.
Kann uns jemand diesbezüglich weiterhelfen? Was sind Best Practice-Ansätze dazu?
Vielen Dank im Voraus!
Viele Grüße
Michael Voigt
Alle Antworten
-
Hallo Michael,
wie schränkst Du denn die Kopfsätze ein? Wäre es eine Möglichkeit, die gleiche Einschränkung auch auf die Detailsätze anzuwenden? Ev. könnte man de Detaildaten per SQL-Statement abfragen und dieses Statement vorab im Paket jeweils per Expression setzen.
-
Hallo Christa,
erstmal vielen Dank für deine Antwort.
Die Kopfdaten werden auf ein Datum gefilter, was in den Detaildatensätze nicht verfügbar ist. Dadurch lässt sich die Detail-Datenmenge darauf leider nicht einschränken.
Den zweiten Teil deiner Aussage habe ich nicht ganz verstanden. Wie meinst du das mit "Statement vorab als Expression setzen"?
Viele Grüße
Michael
-
Hallo Michael,
Du kannst in der Source ja angeben, ob Du die Daten aus Tabelle, View oder als SQL-Statement ermittelst. Das Statement kannst Du vor dem Dataflow z.B. über eine Variable setzen.
Ich könnte mir so ein Szenario vorstellen:
vorab ermitteln, welche Kopfdatensätze (ID oder so) betroffen sind, entweder alle oder min und max (was einfacher wäre)
SQL-Statement aktualisieren- Als Antwort vorgeschlagen Yury Iwtschenko Dienstag, 3. August 2010 17:03
-
Servus Michael
also ich möchte jetzt kein Glaubenskrieg anfangen, aber das kann man auch ohne Integration Services-Projekt lösen.
Verbinde die beiden Server , Filter die Kopfdaten heraus und erstelle einen Index (z.B Auftragsnr) auf die Auswahl.
Je nach dem was du nun machen willst kannst du in einer Procedure die Auswahl/Sicht mit der Detailtabelle verknüpfen und in eine Tabelle schreiben oder auch nach Wunsch exportieren. Oder, eine weitere Auswahl/Sicht erstellen, die die erste Auswahl mit den Detailsätze verbindet. etc.
Falls das Ziel der Daten ein 3ter Server ist, geht das auch ohne Integration Services. (Schaumal unter Verbindungsserver nach)
Falls es aber ein Integration Services-Projekt sein muss, kannst du von dort ebenfalls auf die Auswahl zugreifen und entsprechend weiter mit den Daten verfahren.
gruß micki