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.
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.
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.
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.
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.