Stolperfalle im SSIS 2012

4. Juli 2012

Beim Laden von Daten mittels SSIS ist es oftmals nötigt, den FlatFile-Verbindungs Manager anzuwenden, um Daten aus einer Textdatei auszulesen. Hierbei können während des Beladungsprozesses eines Flatfiles im SSIS 2012 allerdings Probleme auftreten. Beispielsweise, wenn fehlerhafte Datenzeilen im Flatfile vorhanden sind und eine Fehlerausgabe konfiguriert wurde.

In diesem Beispiel beinhaltet Die csv-Datei folgenden Werte:

CustomerID

ThreadID

ServerID

SessionID

1020

5

SV520

2

5002

3

SV380

 

500

4

SV7203

3

     

Als Trennzeichen für die Spalten fungiert ein Komma und ein CRLF als Zeilenende.

Im SSIS 2008 R2 wurde spaltenweise nach einem Trennzeichen gesucht. Falls in einer Spalte nun ein Trennzeichen fehlt, lief man in die Gefahr, dass die nächste Spalte (in unserem Beispiel die nächste Datenzeile) direkt mit angehängt wurde (vorausgesetzt der Datentyp passt).

CustomerID

ThreadID

ServerID

SessionID

1020

5

SV520

2

5002

3

SV380500

4,SV7203,3

     

Um dieses Problem zu umgehen, ist im SSIS 2012 eine neue Funktionalität vorhanden, die nach Trennzeichen am Ende jeder Datenzeile sucht. Diese Funktion heißt AlwaysCheckForRowDelimiters und ist per Default auf True gesetzt.

In der zweiten Datenzeile fehlt die Trennung per Komma, so dass üblicherweise die SessionID als NULL interpretiert wird, da kein Spaltentrennzeichen vorhanden ist.

clip_image002

Wenn allerdings fehlerhafte Datenzeilen auftreten, in denen der Wert der Spalte über mehrere Zeilen geht und kein Zeilentrennzeichen vorhanden ist, läuft der Prozess ohne Ergebnis ins Leere. Selbst die Konfiguration einer Fehlerausgabe führt zu keinem Erfolg. Im unteren Beispiel sieht man eine Datenzeile, die korrekt ist und auch als solche erkannt wird. Die nächste Datenzeile ist deutlich länger, daher wird sie in diesem Beispiel mit (…) abgekürzt.

SV085489|2008-03-04 16:43:37.673575|8|{44270bee-0815-46ca-ba7f-96375c7f1c66}|oy5kay55su2mkgr1pvclrmy4|End|https://sample.intranet.musterag.com/SampleApp/Samplect/main/CTFRONTPAGE.aspx

SV085489|2008-03-04 16:43:37.673575|8|{ad5e0a51-0765-4e51-a333-fbaa591e24b2}|oy5kay55su2mkgr1pvclrmy4|Start|https://sample.intranet.musterag.com/SampleApp/SampleCT/Main/SessionErrorPage.aspx?ErrorMessage= Incorrect Software Version For this Branch&lblFullVersion=

ctlLeftWindow (…)

Um dieses Problem zu umgehen ist es nötig, dass die Eigenschaft im Flatfile Verbindungs-Manager AlwaysCheckForRowDelimiters auf False gesetzt wird (was eigentlich nicht Sinn der Sache ist). Dann funktioniert auch die Fehlerausgabe. In diesem Fall werden die fehlerhaften Datenzeilen, auch aufgrund z.B. fehlender Zeilentrennzeichen, korrekt interpretiert.

Im SSIS 2012 ist die neue Funktion implementiert worden, um Probleme zu beheben,die auftreten, sobald kein Zeilentrennzeichen vorhanden ist. Offenbar ist es aber so, dass bei längeren Datenzeilen der SSIS 2012 damit noch nicht umgehen kann, so dass man sich mit dem oben beschriebenen Workaround behelfen muss.

Siehe weitere Infos:

Flat File Source Changes in Denali

SSIS 2012 hangs when loading a malformed CSV