Performanceverbesserung durch Optimierung der OData-Source-Abfrage

Vor einiger Zeit hatte ich eine Blogreihe erstellt, in der ich erkläre, wie Du ein ETL-Paket in den SQL Integration Services (SSIS) erstellen kannst, um so die in Project Online gespeicherten Informationen in eine gewünschte Tabelle zu importieren. In dem damaligen beschriebenen Beispiel ist es allerdings so, dass das Paket alle Informationen aus den Tabellen in den SQL-Server importiert. Das kann natürlich dazu führen, dass je nach Menge der Datensätze der Import einige Zeit benötigt. Denn wenn ich hier nur die Standardfelder aus der Tabelle „Vorgänge“ nehme, besitzt diese ohne entsprechende benutzerdefinierte Enterprise Felder knapp 100 Spalten. Wenn der Import jetzt knapp 50.000 Datensätze beinhaltet, kann man sich ruhig erstmal einen Kaffee holen, bevor der Batch abgeschlossen ist. Natürlich kannst Du die Abfrage auch ein wenig performanter erstellen. Hierzu musst Du nur die Spalten abfragen die Du für Deine Umgebung benötigst. In diesem Blog-Beitrag möchte ich Dir zeigen, wie Du diese Optimierung vornehmen kannst, damit nur die gewünschten Spalten importiert werden.

Hinweis: Um dieses Beispiel nachzustellen benötigst Du die Konfiguration wie in meinen Artikeln „Hybrid-Project Online Teil (1),(2),(3),(4) und (5)“ beschrieben.

Die Anpassungen kannst Du über die O-Data-Source vornehmen. Gehe hierzu wie folgt vor. Öffne auf dem Server das entsprechende ETL-Paket über Visual Studio. Solltest Du noch kein ETL-Paket erstellt haben, dann erstelle dies wie in den oben genannten Artikeln beschrieben.



Öffne dann die OData-Source. Klicke hierzu auf DataFlow und führe dann einen Doppelklick auf die Verbindung aus.

image

Hier kannst Du die Abfrage für die Spalten einschränken. Da wir mit einer OData-Abfrage arbeiten könntest Du theoretisch mit Anhängen des Zusatzes $select=Spalte1, Spalte2 etc. hinter dem Feed arbeiten. Solltest Du diese Abfrage allerdings direkt in dem OData-Feed ansetzen erhältst Du eine Fehlermeldung. Bei dem SSIS-Connector darfst Du die Abfragen nicht direkt in der URL nutzen, sondern musst die $select Anweisung in dem Feld „Query options“ hinterlegen. Dies sieht wie folgt aus.

image

In meinem Beispiel möchte ich nur die Spalten „ProjektName, PMStatus, ERP und ProjectID“ abfragen. Bei dem Feld PMStatus und ERP handelt es sich um benutzerdefinierte Enterprise-Felder, die anderen zwei sind bekanntlich Standardspalten. Füge jetzt im Feld Query options“ $source= anstatt das $select ein und dann die gewünschten Spalten die Du für Deine Umgebung benötigst hinzu. Bitte beachte, dass die Schreibweise der Spaltennamen der „case-sensitive“ entsprechen müssen.

Bevor Du jetzt die Einstellungen schließt, kannst Du vorher noch auf „Preview“ klicken, um Dir das Ergebnis anzusehen. Wie Du siehst werden nur die gewünschten Spalten abgefragt.

image

Du kannst das Fenster OData Source Editor jetzt schließen.

Solltest Du schon eine Tabelle für den Import erstellt haben so passe diese ebenfalls an. Lösche alle überflüssigen Spalten aus der Tabelle heraus die Du nicht mehr benötigst. Prüfe in einem weiteren Schritt, ob alle Felder aus der Abfrage der Tabelle zugewiesen werden können. Dies kannst Du unter den OLE-DB-Destination Einstellungen kontrollieren. Öffne die Einstellungen und prüfe ob das „Mapping“ ohne Probleme funktioniert. Wie in meinem Beispiel gezeigt sollten hier alle Felder adressierbar sein.

image

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Die folgenden im Rahmen der DSGVO notwendigen Bedingungen müssen gelesen und akzeptiert werden:
Durch Abschicken des Formulares wird dein Name, E-Mail-Adresse und eingegebene Text in der Datenbank gespeichert. Für weitere Informationen wirf bitte einen Blick in die Datenschutzerklärung.