SSIS & Microsoft Live Labs Pivot

September 8, 2010 08:58 by till

Nachdem ich vor einigen Wochen einen sehr guten Vortrag zum Thema BI mit SQL Server und Sharepoint von Oliver Engels und Markus Fischer gehört habe, bin ich ziemlich angetan von einem dabei ebenfalls vorgestelltem Produkt: Microsoft Live Labs Pivot. Irgendwie quält mich auch seit dem die Idee einen kleinen Beitrag zu SSIS und Pivot zu schreiben.

In den letzten paar Tagen habe ich an meiner SSIS Komponente SSIS ImageSource ein paar Änderungen an der internen Verarbeitung vorgenommen und dem ganzen auch mal ein User Interface geschenkt. Noch reicht es zwar nicht um ein neue Release bei Codeplex zu veröffentlichen, aber für eine kleine Demo zusammen mit Microsoft Live Labs Pivot reicht es.

image image


Pivot ist eine Software der Microsoft Live Labs, die es ermöglicht in großen Datenmengen schnell und einfach zu navigieren und zu suchen. Der Kern hinter Pivot basiert auf dem ursprünglichen Projekt Seadragon, jetzt unter zoom.it zu finden. Für die Darstellung von Daten verwendet Pivot sogenannte Collections von Bildern. Beschreibende Daten innerhalb einer Collection, wie z.B. ein Änderungsdatum oder eine Dateigröße bei einem Bild, werden in Facets zusammengefasst. Der große Vorteil ist die konsistente Benutzerführung. Je nach Datentyp werden die einzelnen Facets in Pivot über spezielle Controls dargestellt, so können Zahlen z.B. über Schieberegler ausgewählt werden, Datumswerte über Gruppierungen (Jahr, Monat-Jahr) oder Kalender-Controls.

image image

Pivot eignet sich aber natürlich nicht nur für Urlaubsfotos. Microsoft zeigt dies mit den Beispiel-Collections: Sportler-Fotos, ähnlich der bekannten Sammelbilder, zusammen mit den wichtigsten Kennzahlen (dargestellt als Facet) ergeben tolle Collections, die natürlich besondere Wirkung in Verbindung mit so statistisch geprägten Sportarten wie Football oder Basketball haben. Ich finde das gute alte Quartett beschreibt sehr gut was Collections sind bzw. darstellen.

Nun aber zu meiner kleinen Spielerei mit SSIS & Pivot.

Auf der Microsoft Live Labs Pivot Seite gibt es im Bereich Developer Info die sogenannten Sample Code for Creating Just in Time Pivot Collections Beispiele. Die darin enthaltenen PivoServerTools sind eigentlich alles was man benötigt um selber Just in Time eine Pivot Collection zu erstellen.

Für die Demo habe ich knapp 700 Urlaubsfotos als Originalgröße und als Thumbnails vorliegen. Mit der SSIS ImageSource Komponente habe ich die Thumbnails geladen und dabei die entsprechenden EXIF Daten ausgelesen. Über eine abgeleitete Spalte habe ich mir zusätzlich für jedes einzelne Bild den Pfad zu dem original Bild generieren lassen und diesen dem Datenfluss hinzugefügt.

 image

Hat man das heruntergeladene JiT Collection Projekt mit dem .NET Framework 3.5 (die voreingestellte Version 4 wird nicht von der Script Komponente innerhalb der SSIS unterstützt) kompiliert, so muss die erstellte PivotServerTools Assembly noch dem GAC hinzugefügt werden und innerhalb der SSIS Script Komponente die entsprechende Assembly referenziert werden.

Die einzelnen Eingabespalten werden innerhalb der Script Komponente auf Nullwerte überprüft und dann jeweils in eine Varibale “_NAME DER SPALTE” – siehe Spalte _Artist, _ColorSpace, _Compression – geschrieben und daraus die entsprechenden Facets erstellt.

Der eigentlich Code für die Generierung der Pivot Collection sieht dann wie folgt aus:

   1: string extension = Path.GetExtension(_FullName);
   2:         bool isJpeg = (0 == string.Compare(".jpg", extension, true));
   3:         bool isPng = (0 == string.Compare(".png", extension, true));
   4:             
   5:         FileInfo info = new FileInfo(_FullName);
   6:         coll.AddItem(Path.GetFileNameWithoutExtension(_FullName)
   7:                         , _FullName
   8:                         , _ImageDescription
   9:                         , new ItemImage(_FullName_gross)
  10:                         , new Facet("File name", _FileName
  11:                             , isJpeg ? "*.jpg" : null
  12:                             , isPng ? "*.png" : null)
  13:                         , new Facet("File size", info.Length / 1000)
  14:                         , new Facet("Creation time", _CreationTime)
  15:                         , new Facet("Link:", new FacetHyperlink("click to view image", _FullName))
  16:                         , new Facet("Artist", _Artist)
  17:                         , new Facet("Color Space", _ColorSpace)
  18:                         , new Facet("Compression", _Compression)
  19:                         , new Facet("Copyright", _Copyright)
  20:                         , new Facet("Exif Version", _ExifVersion)
  21:                         , new Facet("GPS", _GPS)
  22:                         );


Die Verarbeitung der knapp 700 Fotos mit 45 Facets hat ca. 7 Sekunden gedauert und schon war meine Pivot Collection erstellt:

SSIS & Microsoft Live Labs Pivot


In den nächsten Wochen werde ich mich ein bisschen intensiver mit Pivot beschäftigen, vielleicht findet sich dann auch noch eine Demo mit besseren Daten oder es springt vielleicht eine SSIS PivotDestination Komponente heraus.


SSIS ShapeFileSource 1.0

September 2, 2010 06:54 by till

ShapeFileSourceGestern habe ich eine neue Version der Komponente SSIS ShapeFileSource bei Codeplex veröffentlicht. Bei der aktuellen Version habe ich einige Fehler behoben und die Performance wesentlich verbessern können; zusätzlich habe ich der Komponente jetzt auch einen Installer “geschenkt”.

Im Download-Bereich ist ein Demo SSIS Paket zu finden, mit dem einige Daten des Projektes DIVA-GIS geladen und im SQL Server über einen Script Task gespeichert werden.

Im folgenden Screenshot sind beispielhaft die italienischen Verwaltungsgebiete aus dem DIVA-GIS Projekt mit dem Report Builder 3.0 visualisiert.

ShapeFileSource008


Die Komponente funktioniert weiterhin nur unter x86, wer also ein x64 System verwendet, muss im Visual Studio in den Projekteigenschaften des SSIS Projektes explizit die 64Bit Runtime auf false setzen und das Paket später entsprechend über dtexec.exe aus dem x86 Verzeichnis aufrufen.


image


Replacing Data Conversion Component for SSIS

July 8, 2010 02:48 by Till

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.