Checkpoints

April 9, 2010 14:30 by till

Wenn innerhalb von SSIS Paketen Fehler auftreten, kann es hilfreich sein die Ausführung beim zuletzt erfolgreich ausgeführten Task wieder zu starten. Z.B. wenn einzelne Tasks innerhalb eines Paketes viel Zeit in Anspruch nehmen, wie ein FTP Task der großen Datenmengen hoch- oder runterlädt. Die Integration Services bieten hierfür Checkpoints an, um Pakete vom Fehler an erneut starten zu lassen, anstatt diese komplett neu auszuführen.

Sind Checkpoints innerhalb eines Paketes konfiguriert, werden während der Ausführung Informationen über den Ablauf in einer XML Datei gespeichert. Beim erfolgreichen Beenden des Paketes wird diese Datei wieder gelöscht und bei der nächsten Ausführung wieder neu erstellt.

Um Checkpoints innerhalb der SSIS Pakete zu verwenden, müssen 3 Parameter auf Paketebene konfiguriert werden, die direkt mit den Checkpoints in Zusammenhang stehen.

image  
Zusätzlich muss noch der Parameter FailPackageOnFailure konfiguriert werden, bei dem sich die richtigen Einstellungen aber etwas schwieriger/umfangreicher gestalten können.

imageEin relativ einfaches Paket, wie oben aufgebaut, kann nur Checkpoints erstellen, wenn bei dem Task der fehlschlägt, der Parameter FailPackageOnFailure auf True gesetzt wird. Was bei 4 Tasks vielleicht noch relativ schnell von der Hand geht.

Besser ist es, alle Tasks, für die die Checkpoint erzeugen wichtig ist, in einen Sequence Container zu verschieben. Hier reicht es dann aus den Parameter FailPackageOnFailure innerhalb des Sequence Containers auf True zu setzen.

 imageimage image

Im obigen Beispiel ist zu sehen, dass das Paket bei erneuter Ausführung nach dem fehlgeschlagenem Task startet. Möchte man dies umgehen, also die Situation herbeiführen dass das Paket da startet wo es abgebrochen ist, muss wieder der Parameter FailPackageOnFailure = True bei allen erforderlichen Tasks gesetzt werden. Ansonsten muss die Aktion die der fehlgeschlagene Task ursprünglich ausführen sollte, manuell durchgeführt werden.

In Punkto Sicherheit ist beim Umgang mit Checkpoints auch noch etwas zu beachten.

<DTS:Variable>
<
DTS:Property DTS:Name="Expression"
/>
<
DTS:Property DTS:Name="EvaluateAsExpression">0</DTS:Property
>
<
DTS:Property DTS:Name="Namespace">User</DTS:Property
>
<
DTS:Property DTS:Name="ReadOnly">0</DTS:Property
>
<
DTS:Property DTS:Name="RaiseChangedEvent">0</DTS:Property
>
<
DTS:Property DTS:Name="IncludeInDebugDump">2345</DTS:Property
>
<
DTS:VariableValue DTS:DataType="8">MeinPasswort</DTS:VariableValue
>
<
DTS:Property DTS:Name="ObjectName">Password</DTS:Property
>
<
DTS:Property DTS:Name="DTSID">
{2B274456-889B-440E-B79C-7E142E32B7AA</DTS:Property>
<
DTS:Property DTS:Name="Description"
/>
<
DTS:Property DTS:Name="CreationName"/>
</
DTS:Variable>
<
DTS:Variable>
<
DTS:Property DTS:Name="Expression"/>
<
DTS:Property DTS:Name="EvaluateAsExpression">0</DTS:Property>
<
DTS:Property DTS:Name="Namespace">User</DTS:Property>
<
DTS:Property DTS:Name="ReadOnly">0</DTS:Property>
<
DTS:Property DTS:Name="RaiseChangedEvent">0</DTS:Property>
<
DTS:Property DTS:Name="IncludeInDebugDump">2345</DTS:Property>
<
DTS:VariableValue DTS:DataType="8">MeinBenutzername</DTS:VariableValue>
<
DTS:Property DTS:Name="ObjectName">Username</DTS:Property>
<
DTS:Property DTS:Name="DTSID">{C92305B2-9E00-46FD-825E-49B4C83CD736}</DTS:Property>
<
DTS:Property DTS:Name="Description"/>
<
DTS:Property DTS:Name="CreationName"/>
</
DTS:Variable>
</
DTS:Variables>

Der oben stehende Code ist ein Auszug aus einer Checkpoint Datei. Da Checkpoints auch Variablen und deren Inhalte mit abspeichern, sollte man sich bei der Verwendung von Checkpoints auch Gedanken um die Zugriffsberechtigungen auf diese machen. Im Code sind die beiden Variablen Username und Password mit den jeweiligen Werten im Klartext zu lesen.


Die Suche mit dem Cache

June 17, 2009 19:27 by till

Der Suche-Task ist innerhalb meiner Projekte mit einer der am häufigsten verwendeten Transformationen; und leider auch der, dessen Bug aus der 2005er Version mich am längsten geärgert hat.

Oder bin ich als einziger auf den Standardwert "<als neue Spalte hinzufügen>" hereingefallen?

image

Die neue Suche im SQL Server 2008 hat sich gegenüber der 2005er Version in einem wesentlichen Punkt verändert, es existiert jetzt ein Cachemodus.

Wenn in sehr großen Referenztabellen nach Informationen gesucht wird, so kann es vorkommen, das das Laden dieser Daten länger dauert als die eigentliche Suche. Wird in einem Paket an mehreren Stellen auf die gleichen Daten für eine Suche zugegriffen, z.B. über eine Schleife, so werden die Daten jedes Mal wieder vollständig geladen.

 

Der SQL Server 2008 bietet hierfür 2 Tasks an, die zusammen verwendet werden können. Zum einen den Task “Cachetransformation” und zum anderen den aufgepeppten “Suche” Task.

image  image

Mit Hilfe des “Cachetransformation” Tasks ist es möglich Daten aus dem Datenfluss heraus in einer Cachedatei (*.caw) zu speichern, wobei hier zur Optimierung der späteren Suche auch Indexspalten festgelegt werden können bzw. müssen. Dieser Cachemodus wird Vollcache genannt. Innerhalb des “Suche”-Task kann nun diese Cachedatei für die Suche verwendet werden, so dass die entsprechenden Daten nicht wieder vollständig vom Server geladen werden müssen.

Der OLE DB-Verbindungsmanager, der natürlich weiterhin unterstützt wird, bietet an dieser Stelle auch noch die Möglichkeit eines Teil-Caches an. Hierbei werden die Daten zuerst im Cache gesucht, werden Sie dort nicht gefunden, wird die Datenbank gefragt. Existiert dort ein Treffer, so wird dieser zusätzlich auch im Cache gespeichert, so dass bei der nächsten Anfrage die Daten aus dem Cache verwendet werden können. Natürlich bietet die OLE DB-Verbindung auch weiterhin die Möglichkeit ohne einen Cache zu suchen.

Weitere Vorteile, die das Prozedere mit der Cachedatei mit sich bringt, ist die Möglichkeit, nun auch innerhalb eines Datenflusses erstellte/generierte Daten als Referenzen zu verwenden und nicht nur bereits gespeichert Daten sowie natürlich auch die Last auf eventuell stark frequentierte Datenbanken zu reduzieren.

Fehler im Datenfluss?

Eine weitere Neuerung ist der Umgang mit nicht gefundenen Datensätzen. Musste man bei der 2005er Version immer die Fehlerausgabe so um konfigurieren, dass fehlerhafte Zeilen umgeleitet werden, so bietet der “Suche”-Task nun direkt die Möglichkeit, nicht gefundene Datensätze in einen ganz normalen Datenfluss umzuleiten.

image image


Geometry, Geography, Spatial Data

April 17, 2009 01:22 by till

Da ich mich in letzter Zeit privat ein bisschen stärker für die Verarbeitung von geographischen Daten interessiere, hier ein weiterer Beitrag zu diesem Thema.

Ein quasi Standard wenn man mit Geodaten arbeitet, ist das Dateiformat Shapefile der Firma ESRI. Wenn man ein bisschen Live oder Google bemüht, findet man eine Reihe verschiedenster Daten als Shapefiles, von Vorwahlbereichen über Strassenverzecihnisse bis hin zu soziodemographischen Daten. Ganz weit oben bei der Bereitstellung solcher Daten und Informationen sind allerdings die USA und leider nicht Deutschland. Hier ist es recht schwierig an guten Daten zu bekommen, so dass man sich am besten an einen komerziellen Dienstleister wendet. Wer die Daten nun in den SQL Server laden möchte bedient sich einfach der SQL Server 2008 Spatial Tools von Morten Nielsen. Leider lassen sich die Daten beim Import nicht direkt weiter verarbeiten.

Abhilfe schafft hier die Firma Safe Software.

logo   fme_workspace_20050331_bg

Safe Software bietet mit der Lösung FME Desktop Translator/Converter eine eigene umfangreiche ETL Plattform zur Verarbeitung von über 255 verschiedenen CAD oder GIS Formaten sowie Komponenten für die SQL Server Integration Services.

Wer sich bei Safe Software eine Trial-Version besorgt um die Software zu testen, dem steht neben der Desktop ETL Lösung FME auch noch sage und schreibe über 250 verschiedene Datenflusskomponenten für die SQL Server Integration Services zur Verfügung. Wer die Komponenten Testen möchte, sollte sich im klaren darüber sein, dass hier einiges an CAD oder GIS Wissen gefragt ist um wirklich ans Ziel zu kommen. Für einen ersten Einstig zu den Komponenten sind hier ein paar Links:

Unter anderem ist bei den Links ein Tutorial mit Testdaten und einer Projektmappe für die SQL Server 2005 Integartion Services zu finden. Ich konnte die Komponenten Aufgrund des Umfanges zwar noch nicht ausgiebig testen, möchte aber kurz auf die Komponente FME Visualization hinweisen.

ONB_Grenzen

Ähnlich der bisherigen Datenviewer stellt die Komponente Funktionen zur Visualisierung der Daten innerhalb des Datenflusses bereit. Die Komponente kommt jedoch nicht Erweiterung der bisherigen Daten-Viewer, sondern als Datenfluss Ziel daher, auch öffnen sich die zu visualisierenden Daten in einer externen Applikation. Im obigen Screenshot habe ich Beispielhaft einmal alle Vorwahlbereiche aus Deutschland dargestellt.

image image

Eine andere Alternative zum Laden von Shapefiles ist der ShapeFile Reader. Die Komponente lädt die Standard Shapefile-Daten sowie die Daten aus der dazugehörigen dbase Datenbank. Aktuell ist die Komponente noch in einem frühen Entwicklungsstadium, in den nächsten Wochen werde ich hier aber weitere Informationen zu der Komponente veröffentlichen.