Dynamische Erzeugung von Parameterfiles mit Informatica Powercenter

Ein Parameterfile dynamisch ein einem Informatica Mapping zu erzeugen ist eine tolle Sache und gehört nicht zu Vorgehensweisen, mit denen sich ein Informatica Entwickler oft beschäftigt. In diesem Artikel werde ich euch diese Vorgehensweise anhand eines einfachen Beispiels näherbringen.

Der Einsatz eines Parameterfiles in Informatica Powercenter ermöglicht es, ein parametrisiertes Mapping für verschiedene Szenarien zu nutzen. Hierfür legt man auf dem Server die Parameterdatei ab und liest diese im Workflow ein. In der Regel werden diese Parameterfiles bei der Implementierung einmalig erzeugt und beim Deployment auf das Zielsystem übertragen. Eine Änderung der Anforderungen hat eine manuelle Anpassung der Parameterdatei zur Folge.

Wie geht man aber am besten vor, wenn sich die Anforderungen häufig oder sogar regelmäßig ändern? Bei vielen Kunden gibt es fest definierte Releasefenster, in dem ein Deployment durchgeführt werden darf. In einem solchen Fall ist die manuelle Anpassung des Parameterfiles keine Option mehr.

Beispielszenario

In meinem Beispielszenario wird pro System ein Parameter LAST_LOAD_DATE verwendet, um für vier verschiedene Quellsysteme eine Deltalogik zu ermöglichen. Da sich dieser Parameter nach jeder Delta-Beladung ändert, wird dieser in einer Datenbanktabelle ausgelagert und am Ende jeder Beladungsstrecke pro System per Update auf das Systemdatum aktualisiert. Die Erzeugung der Parameterdatei erfolgt jeweils als erster Schritt in der Beladungskette.

Parameter-Tabelle erzeugen

Für dieses Beispiel reicht eine sehr einfache Kontrolltabelle, in der lediglich pro System das letzte Ladedatum abgelegt wird.

CREATE TABLE CONTROL_TABLE
(
SOURCE_SYSTEM VARCHAR2 (20) NOT NULL,
LAST_LOAD_DATE TIMESTAMP(6) NOT NULL
);

Damit das Beispiel etwas anschaulicher wird, befülle ich die Kontrolltabelle mit Daten.

INSERT INTO CONTROL_TABLE( SOURCE_SYSTEM, LAST_LOAD_DATE) VALUES
( 'SYSTEM1', TO_TIMESTAMP('01.01.2017 12:45:52.273641'));
INSERT INTO CONTROL_TABLE( SOURCE_SYSTEM, LAST_LOAD_DATE) VALUES
( 'SYSTEM2', TO_TIMESTAMP('01.01.2017 13:11:20.827343'));
INSERT INTO CONTROL_TABLE( SOURCE_SYSTEM, LAST_LOAD_DATE) VALUES
( 'SYSTEM3', TO_TIMESTAMP('01.01.2017 13:54:43.736549'));
INSERT INTO CONTROL_TABLE( SOURCE_SYSTEM, LAST_LOAD_DATE) VALUES
( 'SYSTEM4', TO_TIMESTAMP('01.01.2017 05:43:16.226512'));
COMMIT;

Mapping

Im Informatica Mapping wird die Kontrolltabelle als Quelle genutzt. Den Inhalt des Parameterfiles generiert eine Expression Transformation, bevor dieser in das Flatfile Ziel geschrieben wird.

Informatica - Parameterfile dynamisch generieren - Mapping

Informatica – Parameterfile dynamisch generieren – Mapping

Source Qualifier

Die vier Zeilen der Kontrolltabelle werden im Source Qualifier per SQL Override in eine Zeile transformiert, da diese in der darauffolgenden Expression Transformation in einem Schritt verwendet werden. Im Reiter Ports legt man dafür vier Attribute vom Typ Date an, die der Reihenfolge und der Namensgebung der Select Attribute des SQL Overrides entsprechen müssen.

Informatica - Parameterfile dynamisch generieren - Source Qualifier

Informatica – Parameterfile dynamisch generieren – Source Qualifier

Source Qualifier SQL-Override
SELECT DISTINCT
    T1.LAST_LOAD_DATE AS DT_SYSTEM1_LAST_LOAD,
    T2.LAST_LOAD_DATE AS DT_SYSTEM2_LAST_LOAD,
    T3.LAST_LOAD_DATE AS DT_SYSTEM3_LAST_LOAD,
    T4.LAST_LOAD_DATE AS DT_SYSTEM4_LAST_LOAD
FROM
    CONTROL_TABLE T1
INNER JOIN
    CONTROL_TABLE T2 ON 1=1
INNER JOIN
    CONTROL_TABLE T3 ON 1=1
INNER JOIN
    CONTROL_TABLE T4 ON 1=1
WHERE
    T1.SOURCE_SYSTEM = 'SYSTEM1'
AND
    T2.SOURCE_SYSTEM = 'SYSTEM2'
AND
    T3.SOURCE_SYSTEM = 'SYSTEM3'
AND
    T4.SOURCE_SYSTEM = 'SYSTEM4'

Expression Transformation

In der Expression Transformation werden die vier Attribute, die aus der Kontrolltabelle geladen wurden, in das Format der Parameterdatei umgewandelt. Der Outputport muss so viele Zeilen aufnehmen können, wie in der Expression erzeugt werden.

Informatica - Parameterfile dynamisch generieren - Expression

Informatica – Parameterfile dynamisch generieren – Expression

Inhalt der Expression
'------------------------------PARMFILE--------------------------------------------'||chr(10)||
chr(10)||
'[Global]' ||chr(10)||
'$$DT_SYSTEM1_LOAD_DATE='|| TO_CHAR(DT_SYSTEM1_LAST_LOAD, 'YYYYMMDDHH24MISSUS') || chr(10) ||
'$$DT_SYSTEM2_LOAD_DATE='|| TO_CHAR(DT_SYSTEM2_LAST_LOAD, 'YYYYMMDDHH24MISSUS')  || chr(10) ||
'$$DT_SYSTEM3_LOAD_DATE='|| TO_CHAR(DT_SYSTEM3_LAST_LOAD, 'YYYYMMDDHH24MISSUS')  || chr(10) ||
'$$DT_SYSTEM4_LOAD_DATE='|| TO_CHAR(DT_SYSTEM4_LAST_LOAD, 'YYYYMMDDHH24MISSUS')  || chr(10)

Ausgabe

Die Ausgabedatei hat das gewüschte Format, enthält die erforderlichen Parameter und kann somit für die weitere Verarbeitung genutzt werden.

Informatica - Parameterfile dynamisch generieren - Output

Informatica – Parameterfile dynamisch generieren – Output

Hinweis: Eine Parameterdatei wird am Anfang einer Ausführung des Workflows von Informatica eingelesen. Von daher muss die Erzeugung eines dynamischen Parameterfiles in einem anderen Workflow durchgeführt werden, als in dem Workfow, der dieses als Input nutzt.