Verfasst von: Yohanes Korbafo, IT-Consultant
In einem DataStage Entwicklungsprojekt sei beispielhaft folgende Anforderung gegeben: Eine Liste von 10 Jobparametern soll einheitlich in mehreren Parallel Jobs verwendet werden. Die Parameterwerte sind aber abhängig von einer anderen Variablen, z.B. von einem bestimmten Stichtag bzw. Gültigkeitsdatum (#BUSINESS_DATE#), und sie ändern sich dynamisch von Lauf zu Lauf.
Im Folgenden wird beschrieben wie sich die Werte (Values) eines Parameter Set „von außen“ unter Verwendung von DataStage dynamisch/flexibel vorgeben bzw. ändern lassen.
Parameter Sets bündeln 1 bis n Jobparameter mit den dazugehörigen Values in einem Objekt. Dadurch können die Jobparameter ganz bequem als Sammlung in einem Job hinzugefügt werden und müssen nicht umständlich einzeln hinterlegt werden. Außerdem können sie so – im Rahmen des Deployment-Prozesses – als Set exportiert und importiert werden.
Dabei kann ein Parameter Set mit einer oder mehreren Value-Dateien (zwecks Wertzuweisung) verknüpft werden, welches die Flexibilität zusätzlich erhöht.
Zur Umsetzung unserer Beispiel-Anforderung gehen wir nun schrittweise vor.
1. Parameter Set erstellen und Value-Datei definieren
In der Registerkarte „Parameters“ des Parameter Set werden einzelne Parameter so definiert, wie sie auch in den Jobs individuell angelegt werden würden. D.h. man gibt hier den Namen, die Beschreibung für die Eingabeaufforderung, den Datentyp und optional einen Standardwert für den jeweiligen Parameter an. In unserem Beispiel heißt das Parameter Set „MeineParameter“ mit den Parametern „JN_Param_01 – 10“ – jeweils vom Datentyp String. Standardwerte (Default Values) werden nicht vorgesehen, da die Wertzuweisung (ja eben) über eine Value-Datei erfolgen soll.
Parameter im Parameter Set definieren
In der Registerkarte „Values“ wird nun ein Dateiname für die hier angezeigten Parameterwerte angegeben (hier: „MeineValue“). Die Values sind an dieser Stelle allesamt noch leer.
Value File ohne Wert-Zuweisungen definieren
2. Value-Datei mit aktuellen Werten versorgen
Standardmäßig legt DataStage die Value-Dateien im jeweiligen Projektverzeichnis ab. In unserem Beispiel lautet der Projektname „Meine_Project“.
Value-Datei Speicherort (links) und Inhalt (rechts)
Es muss nun dafür gesorgt werden, dass die Value-Datei mit den entsprechenden Werten für die 10 Parameter beladen wird. Die Dateistrukturen wie hier oben in der Abbildung zu sehen müssen dabei natürlich erhalten bleiben.
Dafür bietet sich die Entwicklung eins Parallel Job an. Dieser Job (hier: „JB_SetParamValue“) dann zukünftig regelmäßig im Sequence Job mit, um die nachfolgenden Jobs mit den aktuellen Parameterwerten zu versorgen.
„JB_SetParamValue“ besteht in unserem Beispiel aus drei Schritten.
Job „JB_SetParamValue“
a. SQL-Abfrage im DB2-Connector
In unserem Beispiel sind die Parameterwerte das Ergebnis einer Datenbankabfrage auf eine Steuertabelle und sind abhängig u.a. vom Jobparameter #BUSINESS_DATE#. Das SQL gibt eine Zeile aus – bestehend aus 10 Spalten entsprechend der Anzahl der Parameter.
-- Input Data for Parameter Set
select
max(decode(SCHLUESSEL,'PARAM_01',WERT)) as JN_Param_01,
max(decode(SCHLUESSEL,'PARAM_02',WERT)) as JN_Param_02,
max(decode(SCHLUESSEL,'PARAM_03',WERT)) as JN_Param_03,
max(decode(SCHLUESSEL,'PARAM_04',WERT)) as JN_Param_04,
max(decode(SCHLUESSEL,'PARAM_05',WERT)) as JN_Param_05,
max(decode(SCHLUESSEL,'PARAM_06',WERT)) as JN_Param_06,
max(decode(SCHLUESSEL,'PARAM_07',WERT)) as JN_Param_07,
max(decode(SCHLUESSEL,'PARAM_08',WERT)) as JN_Param_08,
max(decode(SCHLUESSEL,'PARAM_09',WERT)) as JN_Param_09,
max(decode(SCHLUESSEL,'PARAM_10',WERT)) as JN_Param_10
from(
select SCHLUESSEL, case when WERT = 'J' then 1 else 0 end as WERT
from ADMIN.ADMIN_STEUERUNG
where 1=1
and STEUER_TAB = 'YOHANES_BEISPIEL'
and GUELTIG_AB <= '#BUSINESS_DATE#'
)
with ur;
Ergebnis der SQL-Abfrage
b. Parameterwert final ableiten in Transformer Stage
Im Transformer werden die Parameterwerte final abgeleitet. Umfang und Komplexität variieren natürlich je nach Anforderung, so dass „Kreativität“ gefragt sein könnte.
In diesem Beispiel genügt ein einfaches If-Then-Else Konstrukt.
If Input.JN_Param_XX = 1
Then 'JN_Param_XX=J'
Else 'JN_Param_XX=N'
c. Value-Datei erstellen
Im Letzten Schritt wird die Value-Datei per Sequential File Stage erzeugt. Alle dafür wesentlichen Einstellungen sind den Screenshots zu entnehmen.
Sequential File Stage (Propteries-Tab)
Besonders hinzuweisen ist hier auf die Format-Einstellung „Field defaults > Delimiter = \n“. Der Zeilenumbruch bewirkt, dass in der Ausgabedatei die Spaltennamen untereinander stehen so wie es das Parameter Set erfordert.
Sequential File Stage (Format-Tab)
Startet man nun den Job „JB_SetParamValue“ , wird die Value-Datei „MeineValue“ mit den entsprechenden Werten für die 10 Parameter erzeugt. Das Ergebnis kann man sich z.B. im Parameter Set anschauen.
Parmeter Set „MeineParameter“ (Values-Tab)
3. Value-Datei verwenden
Die Value-Datei wird in der betreffenden Job Activity einfach als Value Expression für das Parameter Set hinterlegt.
Auswählen von „MeineValue“ für das Parameter Set
Fazit
DataStage bietet mit dem Zusammenspiel von Parameter Set und Value-Datei eine besonders flexible Möglichkeit, um dynamisch mit Parametern in Jobs zu arbeiten. Insbesondere dann, wenn sich die Parameterwerte von Lauf zu Lauf ändern können und somit die Anforderung besteht, die Value-Datei „von außen“ immer wieder neu bestücken zu müssen.