Informatica Session Statistiken ohne Zugriff auf das Repository erfassen
Das Erfassen von Ladestatistiken ist eigentlich ganz einfach, wenn man Zugriff auf das Informatica Repository hat und die entsprechenden Tabellen kennt. Leider ist das Abfragen der Informatica Repository Tabellen aber in manchen Projekten nicht erlaubt. Vor der Veröffentlichung der Informatica Powercenter Version 9.0 hatte man schlechte Karten, denn es gab keine andere Möglichkeit auf diese Daten zuzugreifen. Informatica hat hier mitgedacht und eine Reihe neuer Build-in Variablen eingeführt, die dies ab der Version 9 ermöglichen.
In diesem Artikel möchte ich an einem kleinen Beispiel erklären, wie man die neuen Variablen numAffectedRows und numRejectedRows nutzt und wie eine solche Implementierung aussehen könnte.
Tabelle anlegen
Für die Ablage der Statistiken erstellt man eine Tabelle, die alle wichtigen Attribute für die Statistikauswertungen enthält. In meinem Beispiel sind in dieser Tabelle Start- und Endzeitpunkt der Session, die Namen der verschiedenen Informatica Objekte, die Anzahl an erfolgreich geladenen und abgewiesenene Datensätzen der Quell- und der Zieltabelle enthalten.
CREATE TABLE T_SESSION_STATISTICS ( START_TIME DATE, END_TIME DATE, REPOSITORY_NAME VARCHAR2(100 CHAR), FOLDER_NAME VARCHAR2(100 CHAR), WORKFLOW_NAME VARCHAR2(100 CHAR), SESSION_NAME VARCHAR2(100 CHAR), MAPPING_NAME VARCHAR2(100 CHAR), SOURCE_TABLE_NAME VARCHAR2(35 CHAR), TARGET_TABLE_NAME VARCHAR2(35 CHAR), SUCCEEDED_SOURCE_ROWS NUMBER, FAILED_SOURCE_ROWS NUMBER, SUCCEEDED_TARGET_ROWS NUMBER, FAILED_TARGET_ROWS NUMBER, ETL_STATUS VARCHAR2(10 CHAR) );
Statistik Dateien bereinigen
Um alte Statistik Dateien vor jedem Lauf zu löschen, verwende ich einen Command Task, in dem ein Shell Skript aufgerufen wird.
Dieses Skript erstellt eine neue indirekte Dateiliste und löscht alle Dateien, die im Ordner session_statistics vorhanden sind.
#!/bin/bash # variables definition HOME_DIR=/opt/infa_shared SOURCE_PATH=SrcFiles STATISTICS_FILE_FOLDER=session_statistics STATISTICS_FILE_LIST=stg_session_statistics.lst # remove old statistics file if it exists if [ -f ${HOME_DIR}/${SOURCE_PATH}/${STATISTICS_FILE_LIST} ] then rm ${HOME_DIR}/${SOURCE_PATH}/${STATISTICS_FILE_LIST} fi # delete all old session files in the session_statistics folder rm -r ${HOME_DIR}/${SOURCE_PATH}/${STATISTICS_FILE_FOLDER}/*
Statistiken erfassen
In jeder Session, in der Statistiken erfasst werden sollen, nutzt man im Components Reiter der Sessionkonfiguration die Einträge für einen Pre-Session, einen Post-Session Success und einen Post-Session Failure Command.
Pre-Session Command
Im Pre-Session Command schreibt man in die Session spezifische Statistik Datei die Startzeit der Session.
echo -n $(date +"%Y-%m-%d %H:%M:%S") > /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n "" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv;
Post-Session Success Command
In diesem Skript wird zuerst das Endedatum der Session in der Statistikdatei festgehalten. Anschließend werden folgende Werte erfasst:
- $PMRepositoryServiceName: Name des Repository Services
- $PMFolderName: Name des Ordners
- $PMWorkflowName: Name des Workflows
- $PMSessionName: Name der Session
- $PMMappingName: Name des Mappings
- $PMSTATISTICS_TEST_TABLE@TableName: Name der Quelltabelle
- $PMSTATISTICS_TEST_TABLE1@TableName: Name der Zieltabelle
- $PMSQ_STATISTICS_TEST_TABLE@numAffectedRows: Anzahl erfolgreich aus der Quelltabelle gelesene Datensätze
- $PMSQ_STATISTICS_TEST_TABLE@numRejectedRows: Anzahl fehlgeschlagene Datensätze der Quelltabelle
- $PMSTATISTICS_TEST_TABLE1@numAffectedRows: Anzahl erfolgreich in die Zieltabelle geschriebene Datensätze
- $PMSTATISTICS_TEST_TABLE1@numRejectedRows: Anzahl fehlgeschlagene Datensätze der Zieltabelle
Hierbei ist es sehr wichtig zu wissen, dass beim Attribut @numAffectedRows und @ numRejectedRows bei der Quelltabelle der Name des Source Qualifiers angegeben werden muss. In den anderen Fällen wird der Name der Quell- bzw der Zieltabelle angegeben.
echo -n $(date +"%Y-%m-%d %H:%M:%S") >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMRepositoryServiceName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMFolderName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMWorkflowName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSessionName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMMappingName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE@TableName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE1@TableName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSQ_STATISTICS_TEST_TABLE@numAffectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSQ_STATISTICS_TEST_TABLE@numRejectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE1@numAffectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE1@numRejectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n "SUCCEEDED" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv;"
Post-Session Failure Command
Das Post-Session Failure Skript unterscheidet sich nur geringfügig vom Post-Session Success Skript. In der letzten Zeile wird für den ETL_STATUS der Wert FAILED gesetzt. Alle anderen Zeilen sind analog zum Success Skript.
echo -n $(date +"%Y-%m-%d %H:%M:%S") >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMRepositoryServiceName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMFolderName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMWorkflowName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSessionName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMMappingName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE@TableName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE1@TableName >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSQ_STATISTICS_TEST_TABLE@numAffectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSQ_STATISTICS_TEST_TABLE@numRejectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE1@numAffectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n $PMSTATISTICS_TEST_TABLE1@numRejectedRows >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n ";" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv; echo -n "FAILED" >> /opt/infa_shared/SrcFiles/session_statistics/$PMSessionName.csv;"
Erfasste Statistiken in die Datenbank laden
Nachdem alle Sessions beendet sind, in denen die Statistiken erfasst wurden, werden im letzten Schritt diese Daten in die Datenbank geschrieben. Dies erfolgt in meinem Beispiel in zwei Schritten.
Indirekte Dateiliste füllen
Um alle im Ordner session_statistics erfassten Statistiken laden zu können, erstellt man eine indirekte Dateiliste. Dazu verwendet ich einen Command Task, der nachfolgendes Shell-Skript aufruft.
#!/bin/bash STATISTICS_DIR=/opt/infa_shared/SrcFiles/session_statistics FILE_LIST=/opt/infa_shared/SrcFiles/stg_session_statistics.lst touch $FILE_LIST for cur_file in "$STATISTICS_DIR"/* do if [ -f "$cur_file" ] then echo "$cur_file" >> $FILE_LIST fi done
Mapping zum Laden der Statistiken
Im letzten Schritt wird in einem Mapping die indirekte Dateiliste als Quelle genommen und alle darin enthaltenen Statistiken in die Datenbank geschrieben. In der Expression Transformation konvertiere ich lediglich die Datums- und Zahlenwerte von String in DATE bzw INTEGER.
Das war es auch schon. Ich hoffe, dass ich dem einen oder anderen mit meinem Artikel weiterhelfen konnte – auch wenn das Thema schon etwas älter ist.