English Deutsch

 

Range-Lookups mit den Integration Services – Teil I

In den von uns gebauten Integration Services Paketen ist der Lookup der wohl am meisten genutzte Task und im Grunde macht er seine Arbeit auch meistens gut und schnell. Spätestens wenn man während des ETLs jedoch fortlaufende Werte wie z.B. das Einkommen eines Kunden in Gruppen übersetzen will, stößt man mit dem Lookup an seine Grenzen. Diese Artikel-Reihe beschreibt zwei Workarounds, mit denen sich dieses Problem mit dem Lookup trotzdem bewältigen lässt und schlägt zum Schluss eine wesentlich performantere Lösung mittels Script Task vor.

Zur besseren Nachvollziehbarkeit bezieht sich das folgende Szenario auf die Microsoft Demo-Datenbank AdventureWorksDW2008, die unter http://msftdbprodsamples.codeplex.com/ heruntergeladen werden kann. Alle Screenshots basieren auf dem SQL Server 2008, die beschriebenen Vorgehensweisen lassen sich aber auch mit dem SQL Server 2005 realisieren.

Ausgangssituation

In den Quelldaten für die Kunden gibt es eine Spalte, die das jährliche Einkommen der jeweiligen Kunden enthält (wie ein Fahrradhändler an solche Informationen kommt ist nicht nur Ihnen ein Rätsel). Um nach dieser Information später im Cube bzw. den Berichten besser auswerten zu können, sollen mehrere Einkommensgruppen entstehen, in die die einzelnen Kunden einsortiert werden müssen. Die dafür nötige Zuordnungstabelle hat folgenden Aufbau:

Um den “normalen” ETL-Aufwand für dieses Beispiel möglichst gering zu halten, nutzen wir als Quelldaten für die Kunden bereits die Kundendimension des DWHs, in der alle relevanten Kundeninformationen bereits zusammen vorliegen. Diese sollen nun um die IncomeGroupID aus unserer Zuordnungstabelle ergänzt werden.

Lösung mittels Lookup – Ohne Caching

Die hohe Geschwindigkeit des Lookups resultiert vor allem daraus, dass alle dem Lookup zu Grunde liegenden Daten bereits vor der eigentlichen Ausführung in den Hauptspeicher geladen werden und das Nachschlagen der Einzelwerte dann direkt im RAM erfolgen kann. In diesem Modus kann man aber leider nur exakt gleiche Werte wiederfinden. Eine Zuordnung zu einem Bereich, wie er in diesem Fall nötig ist, ist mit eingeschaltetem Caching nicht möglich. Da aber der Weg zum Ziel auch bei ausgeschaltetem Caching alles andere als intuitiv ist, wollen wir uns das doch mal genauer anschauen.

Die Quelldaten werden 1:1 aus der Tabelle DimCustomer gelesen, mit dem Lookup um die zusätzliche Spalte ergänzt und ins Ziel (hier ins Nirvana) geschrieben. Der Lookup ist dabei folgendermaßen konfiguriert:

Der Cache muss also wie gesagt deaktiviert werden.

Als Quelle werden die untere und obere Grenze und die daraus resultierende GruppenID benötigt.

Die Verknüpfung wird erst einmal so eingerichtet, als ob ein Standard-Lookup über eine Spalte eingerichtet wird, damit wir die Ergebnisspalte auswählen können.

Erst unter dem Punkt “Erweitert” kommt dann die eigentliche Besonderheit ins Spiel. Durch das deaktivieren des Caches, können wir eine benutzerdefinierte Abfrage angeben, die für JEDE! Zeile des Datenflusses ausgeführt wird. Diese kann dann wie gezeigt parametrisiert werden. Resultat ist also, dass nicht mehr nach einem speziellen Wert gesucht wird, sondern der Ausdruck “YearlyIncome BETWEEN IncFrom AND IncTo” ausgewertet und die gewünschte GruppenID zurückgegeben wird.

Um das Ergebnis begutachten zu können, hängen wir hinter den Lookup einen Datenviewer mit den wichtigsten Spalten und lassen das ganze laufen.

Wie man sieht erhalten wir das gewünschte Ergebnis. Allerdings deutet sich bereits bei dieser sehr kleinen Datenmenge an, dass die Geschwindigkeit nicht gerade Rekordverdächtig ist. Für kleine bis mittlere Datenmengen ist diese Lösung aber durchaus brauchbar.

Demnächst werden wir uns dann noch mit zwei weiteren Alternativen beschäftigen, die je nach Szenario eine bessere Performance erreichen können.

Microsoft Windows Azure

Nein, Windows Azure ist nicht das neue Desktop-Betriebssystem von Microsoft – und möglicherweise wird Windows Azure auch nicht alle Ihre Probleme lösen, aber ein Blick auf Windows Azure kann durchaus lohnenswert und interessant sein.
Dazu aber eine kleine Einführung in die Thematik Cloud Computing.

 

Cloud Computing

 

Cloud Computing ist momentan das Schlagwort der IT-Branche. Nutzen Sie etwa noch kein Cloud Computing?
(Der Autor kann sich an dieser Stelle ein Lächeln nicht verkneifen)
Aber jetzt im Ernst:
Cloud Computing bedeutet : weg vom zentralen Server, der seiner Umwelt Dienste bereitstellt, hin zu einer ganzen Ansammlung von Servern (Wolke), die die Aufgaben des einzelnen Servers übernehmen. An dieser Stelle dürfte dem geneigten Leser  bei der zu erwartenden Kostenexplosion – schon das erste Mal der Hut hoch gehen.
Aber nein, ganz so schlimm ist es nicht!
Sie können die Bestellung über 50 neue Server also wieder stornieren. Ganz im Gegenteil, Cloud Computing unterstützt Sie aktiv bei der Reduzierung Ihrer IT-Kosten. Anstatt eigene IT-Infrastruktur aufzubauen, mieten Sie doch einfach Rechenkapazität bei einem Cloud-Anbieter. Die Vorteile liegen auf der Hand. Unmengen an Rechenkapazität steht Ihnen zur Verfügung – und zwar dann, wann Sie sie benötigen. Und sollten Sie mal keine Rechenkapazität benötigen, entstehen auch keine Kosten.

 

Microsoft Windows Azure

 

Windows Azure ist so ein Cloud Computing System von Microsoft. Es befindet sich momentan in der Entwicklung, soll aber voraussichtlich noch 2009 fertiggestellt werden. Es richtet sich vorrangig an Softwareentwickler, die während der Entwicklung „on-demand“ Speicherplatz, Rechenkapazität, Datenbanken, etc. benötigen. Unterstützt werden diverse Protokolle wie zum Beispiel SOAP, REST und XML sowie Programmiersprachen von Microsoft (.NET), aber auch non-Microsoft Programmiersprachen wie PHP.
Preise für die Cloud Services hat Microsoft auch schon bekannt gegeben: Demnach soll eine Stunde Rechenzeit in der Cloud 12 US-Cent kosten, Speicherplatz in der Cloud schlägt mit 15 US-Cent pro GByte pro Monat zubuche.

 

Weiterführende Informationen zu Windows Azure finden Sie unter www.microsoft.com/azure.