1

Replacing Data Conversion Component for SSIS

clip_image001Todd McDermid hat bei Codplex eine neue SSIS Komponente veröffentlicht. Die Replacing Data Conversion Component for SSIS ist eine Erweiterung des bestehenden Datenkonvertierungstask.

Die Komponente erstellt, im Gegensatz zur Standard Komponente, nicht einfach eine neue Spalte, in die die konvertierten Daten kopiert werden, sondern ersetzt die bestehende Spalte. In vielen Projekten, definitiv eine Komponente die ich mir schon länger gewünscht habe.

Die Komponente besitzt einen Simple Mode und einen Complex Mode. Im Simple Mode können mit wenigen Klicks Spalten eines bestimmten Datentyps in einen anderen Datentyp konvertiert werden.

ReplacingDataConversion%20Editor-Simple[1]

Der Complex Mode bietet die Möglichkeit ganz gezielt einzelne Spalten von einem Datentyp in einen anderen Datentyp zu konvertieren, ohne dabei die Spaltenbezeichnung zu ändern.

Aus meiner Sicht bringt die Komponente allerdings auch zwei Nachteile mit sich, die man in größeren Projekten beachten sollte. 

Um die bestehende(n) Spalte(n) zu löschen und mit einem anderen Datentypen neu zu erstellen, müssen die Daten in einen neuen Output-Buffer kopiert werden. Die Verarbeitung in der Komponente findet dabei asynchron statt. Dadurch ist die Replacing Data Conversion Component eine sogenannte Blocking-Component, da sämtliche Daten von der Komponente erst vollständig geladen werden müssen, bevor sie weiter verarbeitet werden können; ähnlich wie man es z.B. vom Sortieren-Task kennt. Asynchrone Komponente verbrauchen mehr Speicher und beeinflussen wesentlich die Performance des Paketes. Todd gibt in punkto Performance auch noch die Entwicklung in .NET anstatt C/C++, wie beim originalen Datenkonvertierungstask, als weiteren Nachteil an.

Der zweite Nachteil aus meiner Sicht ist die nicht mehr direkt gegebene Nachvollziehbarkeit der Daten. Normalerweise empfehle ich Änderungen an Daten (z.B. bei Konvertierungen) durch eine Namenskonvention innerhalb des Datenflusses zu dokumentieren. Bei unseren Komponenten vergeben wir standardmäßig Präfixe bei neu erstellten Spalten. So wird z.B. aus der Spalte “Street” die mit datenfabrik.address bereinigt wurde, automatisch die Spalte “dfad_Street”. Eine Spalte die nach mehreren Transformationen immer noch den identischen Namen wie die ursprüngliche Quellspalte besitzt, führt  nach meinen Erfahrungen in größeren Paketen irgendwann zu Fehlern.

Nur zur Info, die Komponente wird von Todd McDermind über den Source Code Bereich zur Verfügung gestellt.

One Comment

  1. Thank you for the review, Tillmann!
    I do agree with your two observations about the component – it is asynchronous, and it is a non-native .Net component. Both of those will make it slower than the native Data Conversion, and will use more memory. However, even though it is an asynchronous component, it does not behave like the Sort component. It will not accumulate all of the incoming rows before outputting one. It will only use slightly more memory than the Data Conversion component, because it uses two in-memory buffers (one for the input rows, and one for the output) instead of just one. That said – it is definitely not for "high-performance" scenarios!
    I will have more of a discussion on the pros and cons on my blog shortly. Thanks for the attention!

Leave a Reply