Biml Teil 5–Mapping

Im 5. Teil meiner Serie über Biml, möchte ich auf das Mapping von Spalten innerhalb des Datenflusses eingehen. Die bisherigen Teile der Biml Serie sind hier zu finden:

 

Das Mapping innerhalb der Komponenten findet immer auf die selbe Art und Weise statt, egal ob es sich um eine Datenflussquelle, eine Datenflusstransformation oder ein Datenflussziel handelt.

Für das Mapping von Spalten, im folgenden am Beispiel einer OleDbSource erklärt, existiert das Element Columns. Innerhalb dieses Elements werden die einzelnen Spalten der Datenflussquelle konfiguriert, was dem Dialog “Spalten” innerhalb des Konfigurationseditors entspricht.

SNAGHTML52c2833

Über das Element Column werden die einzelnen Attribute SourceColumn, TargetColumn, IsUsed und SortKeyPosition definiert. Über das Attribut SourceColumn wird die Quellspalte definiert und über das Attribut TargetColumn umbenannt, das Attribut IsUsed erlaubt es Spalten aus dem Datenfluss zu entfernen.

Das Attribut SortKeyPosition gibt die Sortierreihenfolge der Spalten an. An dieser Stelle ist – anders als bei der Konfiguration über das BIDS – keine zentral Einstellung IsSorted notwendig. Die Angabe einer SortKeyPosition setzt automatisch die Property IsSorted innerhalb der Komponente. An dieser Stelle sei noch einmal darauf hingewiesen, dass die Angabe einer SortKeyPosition die eigentlichen Daten des Datenflusses nicht sortiert, es wird dem Datenfluss lediglich mitgeteilt, nach welchen Spalten die Daten sortiert geliefert werden, also sortiert sind. Eine Prüfung findet an dieser Stelle nicht statt. Stimmt die Eingabe mit der getätigten Abfrage nicht überein, kann dies bei der Verarbeitung zu erheblichen Fehlern führen, die man nicht direkt bemerkt.

Bei der Konfiguration eines Union All ist zu beachten, dass das Umbenennen von Spalten ggf. neue Spalten generiert. So entstehen durch die Angabe der TargetColumn ABC und ABD  für die selbe Eingabespalte zwei neue Spalten, die auf der einen Seite nicht zugeordnet sind.

SNAGHTML5566488

Wichtig beim Mapping über Biml-Script und dem BIDS-Helper ist, dass die Angabe von Spaltennamen beim Erstellen des Paketes nicht Case Sensitive behandelt werden. Dies führt dazu, dass die Spaltennamen Strasse und STRASSE aus unterschiedlichen Quellen in einem Union All auf eine Spalte gemappt werden. Auch die bewusste Definition unterschiedlicher Spalten mit Groß-/Kleinschreibung schlägt fehl, die Spalten werden immer wieder zusammen gemappt.