Daten sind unsere Leidenschaft!

Flexibles Laden von Flatfiles und dynamische Ermittlung des Dateinamens zur Laufzeit des ETL-Prozesses

Wer unter anderem Datenbewirtschaftung (ETL) mit Informatica PowerCenter betreibt, hat bestimmt schon mindestens einmal vor dem Problem gestanden, dass auch im Zuge (täglicher) Routineverarbeitungen Flatfiles mit nicht gleichbleibendem Namen eingelesen und verarbeitet werden mussten. Verschärft wurde das Problem vielleicht noch dadurch, dass die Anzahl der zu verarbeitenden Files nicht zwangsweise vorher bekannt war und der jeweilige Dateiname außerdem auch noch im Target (File oder Datenbanktabelle) protokolliert werden musste, ein Problem, das typischerweise beim Datawarehousing auftritt.

So enthalten Dateinamen bspw. oftmals einen Zeitstempel, entsprechend der Zeit der Dateierstellung oder ?Lieferung oder einer anderen Bezugszeit. Gelegentlich müssen zusätzlich zu den Standard-Daten auch Korrekturdaten eingelesen und verarbeitet werden, d.h. es sind weitere Dateien mit nicht vorhersehbaren Dateinamen zu berücksichtigen.

Bis zur Version 8.4 hat Informatica PowerCenter zur Lösung dieser Probleme nicht viel an Unterstützung angeboten. Der Name des zu verarbeitenden Files musste zur Implementierungszeit des ETL-Prozesses festgelegt oder über ein Parameterfile eingestellt werden; damit stand auch die Anzahl der Eingabedateien von vorneherein fest. (Allerdings bestand dadurch auch keine Notwendigkeit mehr, den Dateinamen zur Laufzeit dynamisch ermitteln zu müssen.)

Für den Fall, dass mehrere Files mit nicht feststehenden Dateinamen verarbeitet werden sollten, musste in einem solchen Fall eine Vorverarbeitung zum eigentlichen ETL-Prozess eingerichtet werden, bestehend aus teilweise durchaus aufwändigen Shell- oder anderen Skripten zur Steuerung der flexiblen Datei-Vorbereitung (Abbildung auf den zum Beginn des ETL-Prozesslaufs fix eingestellten Dateinamen); eine dynamische Ermittlung des Dateinamens innerhalb des ETL-Prozesses, also zur Laufzeit, war dadurch jedoch immer noch nicht möglich.

Zu den geschilderten Problemen bietet Informatica PowerCenter seit der Version 8.5 (stabil ab 8.5.1) folgende nützliche Hilfsmittel an:

  • „File List“: Als Source-File wird anstatt eines „Nutzdaten“-Files eine Datei angegeben, die pro Zeile den vollständigen Pfad eines solchen Nutzdaten-Files enthält. PowerCenter liest diese File List und verarbeitet in einem zweiten Schritt sukzessive die in der Liste aufgeführten Nutzdaten-Files. Die File List kann mittels sehr einfacher Vorverarbeitung außerhalb des PowerCenter-ETL-Prozesses, sie kann aber bspw. auch mittels eines Command Task innerhalb dessen erstellt werden. Jedoch ist dies eine vergleichsweise einfache Angelegenheit und macht den bisher notwendigen, skriptorientierten und aufwändigen Vorprozess in weiten Teilen obsolet!
  • „CurrentlyProcessedFileName“-Port: In der Source-Transformation kann bei den Eigenschaften eine neue Option ausgewählt werden, nämlich „Add Currently Processed Flat File Name Port“. Durch Wahl dieser Option wird den bereits vorhandenen Ports als letzter der (nicht umbenennbare) String-Port „CurrentlyProcessedFileName“ hinzugefügt. Er wird zu Beginn der Abarbeitung des Mappings bzw. der zugeh. Session automatisch von PowerCenter mit dem Dateinamen des aktuell in Verarbeitung befindlichen Files belegt und kann beliebig wie jeder andere String auch weiterverarbeitet, insb. also in einem Ausgabefeld des Targets protokolliert werden.

Hierzu ein kleines Beispiel:

  • Es sollen 5 Eingabefiles (benannt flatfile_in_1 bis flatfile_in_5) mit lediglich einem einzigen Wert (Zahl) pro Zeile gelesen und in einem simplen Pass-Through-Mapping in ein einziges, gemeinsames Ausgabefile (benannt FlatfileOut) geschrieben werden. Das Ausgabefile enthält pro Zeile den im Ursprungszustand belassenen Wert, zusammen mit dem Namen des Eingabefiles aus dem der Wert gelesen wurde.
  • Verwendet werden hierzu die oben angesprochenen Hilfsmittel. Die File List heißt FlatfileIn.
  • Die folgenden Hardcopys sollen das Beispiel illustrieren.

Mapping und Einstellungen an der Source-Transformation:

Folgende Einstellungen müssen an der Session vorgenommen werden (wichtig: Source filetype „Indirect“: der Source filename enthält dann den Namen der File List-Datei):

Es wurden nur die – für das Beispiel – notwendigen Angaben dargestellt (die Verzeichnisse müssen für eine vollständige, funktionierende Session natürlich ebenfalls angegeben werden).

Folgende Daten werden im Beispiel als Source verwendet bzw. als Target erzeugt:

Bildnachweise: ©sqldev-101614-2340766-ci.jpg

Das könnte Sie auch interessieren

Bleiben Sie informiert:

its-people hilft Ihnen...

Weitere Blogthemen: