Home
Datenquellen
Controllflow
DataFlow
SSIS
ToC
Impressum
 

In einer Parent-Child Struktur die Schlüssel von Strings nach Integer austauschen
 

Im Data Warehouse Umfeld werden Parent-Child Beziehungen sehr oft und auch gerne verwendet. Damit können beliebig tiefe Hierarchiestrukturen einfach erstellt werden. Die Analysis Services unterstützen natürlich diese Strukturen.
Um die maximale Performance und Effektivität zu erreichen, sollten die Schlüssel in einer Parent-Child Dimension vom Typ Integer sein.

Häufig werden diese Strukturen von anderen Vorsystemen, wie zum Beispiel SAP, geliefert. Dann sind die Schlüssel meistens Strings mit zum Teil beachtlicher Länge.

In diesem Demopaket möchte ich Ihnen zeigen, wie diese Strings mit Hilfe eines SSIS Pakets auf Integerwerte umgesetzt werden können.

Bitte passen Sie die Verbindungs-Manager an Ihre Umgebung an.

Rahmenbedingungen

Damit dieses Demopaket bei Ihnen ausgeführt werden kann, muss die Beispieldatenbank AdventureWorks in Ihrer Testumgebung zur Verfügung stehen. Die aktuelle Version der Beispiele für den SQL Server 2005 finden Sie hier.

In dem Zipfile finden Sie das SSIS Paket und zusätzlich ein SQL Script, damit Sie prüfen können, ob die Umsetzung der Schlüssel auch fehlerfrei funktioniert hat.

Beispiel

Vorbereitung
In dem Sequenzcontainer wird aus der Tabelle HumanResources.Employee die Daten als Textdatei ausgegeben. Die vorhandene Hierarchie wird über die beiden VARCHAR Felder ZeilenKeyAN und ParentAN gebildet. Wenn Sie den Verbindungsmanger für die Textdatei ParentChildDemo.txt nicht geändert haben, finden Sie diese Datei in C:\.

Als nächsten Schritt wird die Tabelle ParentChildDemo in der TempDb angelegt falls diese dort noch
nicht zur Verfügung steht. Ist diese Tabelle bereits vorhanden, so wird der Inhalt gelöscht.

 

Eigentliche Demo


In der Datenflusstask neue Einträge ergänzen wird die Textdatei eingelesen. Für den folgenden Schritt wird die Suche Transformation verwendet. Die Aufgabe dieser Transformation ist, festzustellen, ob neue Datensätze für die Tabelle ParentChildDemo vorhanden sind. Neue Datensätze liegen immer dann vor, wenn die Suche Transformation keine Datensätze finden kann.

Sätze, die nicht gefunden werden, werden über den Fehlerausgang (roter Pfeil) ausgegeben, wenn die Fehlerbehandlung entsprechend konfiguriert wurde.

Dieser Datenstrom wird direkt in die Tabelle eingefügt. Mit dieser Technik wird die Tabelle sehr effizient mit den neuen Datensätzen gefüllt.

Wieder zurück in der Ablaufsteuerung wird die Umsetzung aller Parentkeys in der gesamten Tabelle ParentChildDemo mit Hilfe einer Task SQL ausführen durchgeführt.

Besonderheiten
Wenn Sie mit der Lösung experimentieren wollen, dann können Sie den Sequenzcontainer deaktivieren und Sätze in der Textdatei am Ende löschen oder hinzufügen.

Eine nicht gefüllte Spalte ParentAN, das die oberste Ebene der Parent-Child-Hierarchie kennzeichnet wird nicht als NULL sondern als Leerstring in die VARCHAR Spalte der Tabelle geschrieben; bei einem numerischen Feld würde in diesem Fall NULL gespeichert.

Selbstverständlich müssen SSIS Pakete auch getestet werden. Im Zipfile liegt ein SQL Script, mit dem Sie überprüfen können, ob die Umsetzung der Schlüssel auch wirklich funktioniert hat.


Zusammenfassung

Die Suche Transformation kann auch ohne Probleme dazu verwendet werden um festzustellen, ob ein Datensatz bereits vorhanden ist. Bei kleinen und mittleren Datenvolumen funktioniert das sehr schnell. Bei sehr großem Datenvolumen (> 1.000.000) muss der Ressourcenverbrauch beobachtet werden. 
Um die Demo nicht zu kompliziert zu machen, habe ich darauf verzichtet, nur in den neuen Datensätzen die Parentkeys neu zu setzten.

Das Demopaket finden Sie hier.
Die SQL Befehle können Sie hier ansehen.

Komponentenindex:

  • Task SQL ausführen
  • Sequenzcontainer
  • Datenflusstask
  • Flatfilequelle
  • Suche (Lookup) Transformation

erstellt am 26.7.2006