Eigene Komponenten für SSIS (Teil 1)

16. März 2011

SQL Server Integration Services (SSIS) ist das Tool der Wahl bei  der Konsolidierung verschiedener Datenquellen. Makroskopische Aufgaben werden in SSIS zu Paketen zusammengefasst, die wiederum aus atomaren Tasks zusammengesetzt sind. Microsoft liefert bereits von Haus aus eine Vielzahl nativer Tasks mit, doch offene Architektur und .NET-Basierung ermöglichen auch Eigenentwicklungen mit vertretbarem Aufwand. In diesem Zusammenhang spricht man von Custom Components.

Das Entwickeln von Custom Components bietet sich an, wenn bestimmte Vorgänge mit nativen Tasks nicht oder nur aufwändig zu realisieren sind und Wiederverwendbarkeit wichtig ist.

Um eine Custom Component zu erstellen, legt man mit Visual Studio ein neues Projekt mit dem Template Class Library an. Über die Referenz PipelineHost wird die auf COM Libraries basierende SSIS Infrastruktur dem .NET Entwickler als managed Wrapper zur Verfügung gestellt.

Für Datenflusskomponenten leitet man die eigene Klasse von PipelineComponent ab. Dabei lassen sich über das Attribut DtsPipelineComponent Eigenschaften wie Typ, Icon und Anzeigename spezifizieren.

   1: [DtsPipelineComponent(// Benutzt SSIS zur Gruppierung für Toolbox-Einträge

   2:                       ComponentType = ComponentType.Transform,

   3:                       // Wird in SSIS in Eigenschaften der Task angezeigt

   4:                       DisplayName = "SDXPerfStat",

   5:                       // Wird in SSIS in Eigenschaften der Task angezeigt

   6:                       Description="Gathering Performance Statistics",

   7:                       // Bild für die CustomComponent im SSIS Data Flow Task

   8:                       IconResource = "SDXPerfStat.performance.ico")]    

   9: public class SDXPerfStat : PipelineComponent

  10: {

  11:     // HIER WEITERE METHODEN FÜR DAS SSIS FRAMEWORK EINFÜGEN

  12: }

Im Laufe des Designs und der Ausführung eines SSIS Paketes treten mehrere Events auf, die auch bei der Paketentwicklung im SSIS Tab Event Handlers sichtbar sind. SSIS ruft nun nach Einbindung der Custom Component in eine Data Flow Task entsprechende Methoden auf, die die Basisklasse PipelineComponent bereitstellt. Der Komponentenentwickler kann nun je nach funktionalem Bedarf keine, eine oder mehrere Methoden der Basisklasse überschreiben um eigene Funktionalität abzubilden. Die wichtigsten dieser Methoden sind im folgenden Aufrufschema dargestellt (links Ausführungsmodus, rechts Designmodus des SSIS-Paketes).

EventMethoden 

Jede dieser Methoden erfüllt spezifische Aufgaben. Beispielsweise überprüft Validate() ob sich die Komponente in einem ordnungsgemäßen Status befindet. Der Komponentenentwickler definiert, welche Prüfungen durchgeführt werden.

In Validate() wird typischerweise überprüft, ob die richtige Anzahl von Input- und Output-Spalten der Komponente vorhanden ist oder ob Eigenschaften richtig gesetzt sind. Entsprechend wird Validate() im SSIS Designmodus mehrfach aufgerufen, damit bei Bearbeitung der Eigenschaften im Advanced Editor jederzeit der Gültigkeitsstatus der Komponente überprüft wird. Validate() gibt an SSIS darüber Informationen zurück mittels eines Kategoriewertes (Corrupt, NeedsNewMetadata u.a.) und eines Fehlertyps. Zum Vergleich eine gültige und zwei ungültige Custom Components im SSIS Designer.

 StatusComp

In der nächsten Folge dieser Serie betrachten wir weitere Methoden und die Einbindung von Custom Components in SSIS.