When you used an update strategy transformation in
the mapping or specified the "Treat Source Rows As" option as update,
informatica integration service updates the row in the target table whenever
there is match of primary key in the target table found.
The update strategy works only
The update strategy works only
Ø When there is primary key defined in the target definition.
Ø When you want update the target table based on the primary key.
What if you want to update the target table by a matching column other than the primary key? In this case the update strategy won’t work. Informatica provides feature, "Target Update Override", to update even on the columns that are not primary key.
You can find the Target Update Override option in the target definition properties tab. The syntax of update statement to be specified in Target Update Override is
UDATE TARGET_TABLE_NAME
SET TARGET_COLUMN1 = :TU.TARGET_PORT1,
[Additional update columns]
WHERE TARGET_COLUMN = :TU.TARGET_PORT
AND [Additional conditions]
Here TU means target update and used to specify the target ports.
Example: Consider the employees table as an example. In the employees table, the primary key is employee_id. Let say we want to update the salary of the employees whose employee name is MARK. In this case we have to use the target update override. The update statement to be specified is
UPDATE EMPLOYEES
SET SALARY = :TU.SAL
WHERE EMPLOYEE_NAME = :TU.EMP_NAME
This article tries to minimize hard-coding in ETL, thereby increasing flexibility, reusability, readabilty and avoides rework through the judicious use of Informatica Parameters and Variables
Step by step we will see what all attributes can be parameterized in Informatica from Mapping level to the Session, Worklet, Workflow, Folder and Integration Service level.
Parameter files provide us with the flexibility to change parameter and variable values every time we run a session or workflow.
Parameter File in Informatica
- A parameter file contains a list of parameters and variables with their assigned values.
- $$LOAD_SRC=SAP
- $$DOJ=01/01/2011 00:00:01
- $PMSuccessEmailUser=admin@mycompany.com
- Each heading section identifies the Integration Service, Folder, Workflow, Worklet, or Session to which the parameters or variables apply.
- [Global]
- [Folder_Name.WF:Workflow_Name.WT:Worklet_Name.ST:Session_Name]
- [Session_Name]
- Define each parameters and variables definition in the form name=value pair on a new line directly below the heading section. The order of the parameters and variables is not important within the section.
[Folder_Name.WF:Workflow_Name.ST:Session_Name] $DBConnection_SRC=Info_Src_Conn $DBConnection_TGT=Info_Tgt_Conn $$LOAD_CTRY=IND $Param_Src_Ownername=ODS $Param_Src_Tablename=EMPLOYEE_IND
- The Integration Service interprets all characters between the beginning of the line and the first equal signs as the parameter name and all characters between the first equals sign and the end of the line as the parameter value. If we leave a space between the parameter name and the equals sign, Integration Service interprets the space as a part of the parameter name.
- If a line contains multiple equal signs, Integration Service interprets all equals signs after the first one as part of the parameter value.
- Do not enclose parameter or variable values in quotes as Integration Service interprets everything after the first equals sign as part of the value.
- Do not leave unnecessary line breaks or spaces as Integration Service interprets additional spaces as part of a parameter name or value.
- Mapping parameter and variable names are not case sensitive.
- To assign a null value, set the parameter or variable value to <null> or simply leave the value blank.
- $PMBadFileDir=<null>
- $PMCacheDir=
- The Integration Service ignores lines that are not valid headings,or do not contain an equals sign character (=) as Comments.
--------------------------------------- Created on 01/01/2011 by Admin. Folder: Work_Folder CTRY:SG ; Above are all valid comments ; because this line contains no equals sign.
- Precede parameters and variables used within mapplets with their corresponding mapplet name.
[Session_Name] mapplet_name.LOAD_CTRY=SG mapplet_name.REC_TYPE=D
- If a parameter or variable is defined in multiple sections in the parameter file, the parameter or variable with the smallest scope takes precedence over parameters or variables with larger scope.
[Folder_Name.WF:Workflow_Name] $DBConnection_TGT=Orcl_Global [Folder_Name.WF:Workflow_Name.ST:Session_Name] $DBConnection_TGT=Orcl_SG
In the specified session name, the value for session parameter $DBConnection_TGT is Orcl_SG and for rest all other sessions in the workflow, the connection object used will be Orcl_Global.Scope of Informatica Parameter File
Next we take a quick look on how we can restrict the scope of Parameters by changing the Parameter File Heading section.- [Global] -> All Integration Services, Workflows, Worklets, Sessions.
- [Service:IntegrationService_Name] -> The Named Integration Service and Workflows, Worklets, Sessions that runs under this IS.
- [Service:IntegrationService_Name.ND:Node_Name]
- [Folder_Name.WF:Workflow_Name] -> The Named workflow and all sessions within the workflow.
- [Folder_Name.WF:Workflow_Name.WT:Worklet_Name] -> The Named worklet and all sessions within the worklet.
- [Folder_Name.WF:Workflow_Name.WT:Worklet_Name.WT:Nested_Worklet_Name] -> The Named nested worklet and all sessions within the nested worklet.
- [Folder_Name.WF:Workflow_Name.WT:Worklet_Name.ST:Session_Name] -> The Named Session.
- [Folder_Name.WF:Workflow_Name.ST:Session_Name] -> The Named Session.
- [Folder_Name.ST:Session_Name] -> The Named Session.
- [Session_Name] -> The Named Session.
Types of Parameters and Variables
There are many types of Parameters and Variables we can define. Please find below the comprehensive list: - Service Variables: To override the Integration Service variables such as email addresses, log file counts, and error thresholds. Examples of service variables are $PMSuccessEmailUser, $PMFailureEmailUser, $PMWorkflowLogCount, $PMSessionLogCount, and $PMSessionErrorThreshold.
- Service Process Variables: To override the the directories for Integration Service files for each Integration Service process. Examples of service process variables are $PMRootDir, $PMSessionLogDir and $PMBadFileDir.
- Workflow Variables: To use any variable values at workflow level. User-defined workflow variables like $$Rec_Cnt
- Worklet Variables: To use any variable values at worklet level. User-defined worklet variables like $$Rec_Cnt. We can use predefined worklet variables like $TaskName.PrevTaskStatus in a parent workflow, but we cannot use workflow variables from the parent workflow in a worklet.
- Session Parameters: Define values that may change from session to session, such as database connections, db owner, or file names. $PMSessionLogFile, $DynamicPartitionCount and $Param_Tgt_Tablename are user-defined session parameters. List of other built in Session Parameters:$PMFolderName, $PMIntegrationServiceName, $PMMappingName, $PMRepositoryServiceName, $PMRepositoryUserName, $PMSessionName, PMSessionRunMode [Normal/Recovery], $PM_SQ_EMP@numAffectedRows, $PM_SQ_EMP@numAppliedRows, $PM_SQ_EMP@numRejectedRows, $PM_SQ_EMP@TableName, $PM_TGT_EMP@numAffectedRows, $PM_TGT_EMP@numAppliedRows, $PM_TGT_EMP@numRejectedRows, $PM_TGT_EMP@TableName, $PMWorkflowName, $PMWorkflowRunId, $PMWorkflowRunInstanceName.Note: Here SQ_EMP is the Source Qualifier Name and TGT_EMP is the Target Definition.
- Mapping Parameters: Define values that remain constant throughout a session run. Examples are $$LOAD_SRC, $$LOAD_DT. Predefined parameters examples are $$PushdownConfig.
- Mapping Variables: Define values that changes during a session run. The Integration Service saves the value of a mapping variable to the repository at the end of each successful session run and uses that value the next time you run the session. Example $$MAX_LOAD_DT
Difference between Mapping Parameters and Variables
A mapping parameter represents a constant value that we can define before running a session. A mapping parameter retains the same value throughout the entire session. If we want to change the value of a mapping parameter between session runs we need to Update the parameter file.
A mapping variable represents a value that can change through the session. The Integration Service saves the value of a mapping variable to the repository at the end of each successful session run and uses that value the next time when we run the session. Variable functions like SetMaxVariable, SetMinVariable, SetVariable, SetCountVariable are used in the mapping to change the value of the variable. At the beginning of a session, the Integration Service evaluates references to a variable to determine the start value. At the end of a successful session, the Integration Service saves the final value of the variable to the repository. The next time we run the session, the Integration Service evaluates references to the variable to the saved value. To override the saved value, define the start value of the variable in the parameter file.
Parameterize Connection Object
First of all the most common thing we usually Parameterise is the Relational Connection Objects. Since starting from Development to Production environment the connection information obviously gets changed. Hence we prefer to go with parameterisation rather than to set the connection objects for each and every source, target and lookup every time we migrate our code to new environment.E.g.
- $DBConnection_SRC
- $DBConnection_TGT
If we have one source and one target connection objects in your mapping, better we relate all the Sources, Targets, Lookups and Stored Procedures with $Source and $Target connection. Next we only parameterize $Source and $Target connection information as:
- $Source connection value with the Parameterised Connection $DBConnection_SRC
- $Target connection value with the Parameterised Connection $DBConnection_TGT
Lets have a look how the Parameter file looks like. Parameterization can be done at folder level, workflow level, worklet level and till session level.
[WorkFolder.WF:wf_Parameterize_Src.ST:s_m_Parameterize_Src] $DBConnection_SRC=Info_Src_Conn $DBConnection_TGT=Info_Tgt_Conn
Here Info_Src_Conn, Info_Tgt_Conn are Informatica Relational Connection Objects.
Note: $DBConnection lets Informatica know that we are Parameterizing Relational Connection Objects.
For Application Connections use $AppConnection_Siebel, $LoaderConnection_Orcl when parameterizing Loader Connection Objects and $QueueConnection_portal for Queue Connection Objects.
In a precise manner we can use Mapping level Parameter and Variables as and when required. For example $$LOAD_SRC, $$LOAD_CTRY, $$COMISSION, $$DEFAULT_DATE, $$CDC_DT.
Parameterize Source Target Table and Owner Name
Situation may arrive when we need to use a single mapping from various different DB Schema and Table and load the data to different DB Schema and Table. Condition provided the table structure is the same.
A practical scenario may be we need to load employee information of IND, SGP and AUS and load into global datawarehouse. The source tables may be orcl_ind.emp, orcl_sgp.employee, orcl_aus.emp_aus.
So we can fully parameterise the Source and Target table name and owner name.
- $Param_Src_Tablename
- $Param_Src_Ownername
- $Param_Tgt_Tablename
- $Param_Tgt_Ownername
The Parameterfile:-
[WorkFolder.WF:wf_Parameterize_Src.ST:s_m_Parameterize_Src] $DBConnection_SRC=Info_Src_Conn $DBConnection_TGT=Info_Tgt_Conn $Param_Src_Ownername=ODS $Param_Src_Tablename=EMPLOYEE_IND $Param_Tgt_Ownername=DWH $Param_Tgt_Tablename=EMPLOYEE_GLOBAL
Check the implementation image below:
Parameterize Source Qualifier Attributes
Next comes what are the other attributes we can parameterize in Source Qualifier.
- Sql Query: $Param_SQL
- Source Filter: $Param_Filter
- Pre SQL: $Param_Src_Presql
- Post SQL: $Param_Src_Postsql
If we have user-defined SQL statement having join as well as filter condition, its better to add a$$WHERE clause at the end of your SQL query. Here the $$WHERE is just a Mapping level Parameter you define in your parameter file.
In general $$WHERE will be blank. Suppose we want to run the mapping for todays date or some other filter criteria, what you need to do is just to change the value of $$WHERE in Parameter file.
$$WHERE=AND LAST_UPDATED_DATE > SYSDATE -1 [WHERE clause already in override query] OR $$WHERE=WHERE LAST_UPDATED_DATE > SYSDATE -1 [NO WHERE clause in override query]
Parameterize Target Definition Attributes
Next what are the other attributes we can parameterize in Target Definition.
- Update Override: $Param_UpdOverride
- Pre SQL: $Param_Tgt_Presql
- Post SQL: $Param_Tgt_Postsql
$Param_UpdOverride=UPDATE $$Target_Tablename.EMPLOYEE_G SET ENAME = :TU.ENAME, JOB = :TU.JOB, MGR = :TU.MGR, HIREDATE = :TU.HIREDATE, SAL = :TU.SAL, COMM = :TU.COMM, DEPTNO = :TU.DEPTNO WHERE EMPNO = :TU.EMPNO
Parameterize Flatfile Attributes
Now lets see what we can do when it comes to Source, Target or Lookup Flatfiles.
- Source file directory: $PMSourceFileDir\ [Default location SrcFiles]
- Source filename: $InputFile_EMP
- Source Code Page: $Param_Src_CodePage
- Target file directory: $$PMTargetFileDir\ [Default location TgtFiles]
- Target filename: $OutputFile_EMP
- Reject file directory: $PMBadFileDir\ [Default location BadFiles]
- Reject file: $BadFile_EMP
- Target Code Page: $Param_Tgt_CodePage
- Header Command: $Param_headerCmd
- Footer Command: $Param_footerCmd
- Lookup Flatfile: $LookupFile_DEPT
- Lookup Cache file Prefix: $Param_CacheName
Parameterize FTP Connection Object Attributes
Now for FTP connection objects following are the attributes we can parameterize:
- FTP Connection Name: $FTPConnection_SGUX
- Remote Filename: $Param_FTPConnection_SGUX_Remote_Filename [Use the directory path and filename if directory is differnt than default directory]
- Is Staged: $Param_FTPConnection_SGUX_Is_Staged
- Is Transfer Mode ASCII:$Param_FTPConnection_SGUX_Is_Transfer_Mode_ASCII
Parameterization of Username and password information of connection objects are possible with$Param_OrclUname.
When it comes to password its recommended to Encrypt the password in the parameter file using the pmpasswd command line program with the CRYPT_DATA encryption type.
Using Parameter File
We can specify the parameter file name and directory in the workflow or session properties or in the pmcmd command line.
We can use parameter files with the pmcmd startworkflow or starttask commands. These commands allows us to specify the parameter file to use when we start a workflow or session.
The pmcmd -paramfile option defines which parameter file to use when a session or workflow runs. The -localparamfile option defines a parameter file on a local machine that we can reference when we do not have access to parameter files on the Integration Service machine
The following command starts workflow using the parameter file, param.txt:
pmcmd startworkflow -u USERNAME -p PASSWORD -sv INTEGRATIONSERVICENAME -d DOMAINNAME -f FOLDER -paramfile 'infa_shared/BWParam/param.txt' WORKFLOWNAME
The following command starts taskA using the parameter file, param.txt:
pmcmd starttask -u USERNAME -p PASSWORD -sv INTEGRATIONSERVICENAME -d DOMAINNAME -f FOLDER -w WORKFLOWNAME -paramfile 'infa_shared/BWParam/param.txt' SESSION_NAME
Workflow and Session Level Parameter File
When we define a workflow parameter file and a session parameter file for a session within the workflow, the Integration Service uses the workflow parameter file, and ignores the session parameter file. What if we want to read some parameters from Parameter file at Workflow level and some defined at Session Level parameter file.
The solution is simple:
- Define Workflow Parameter file. Say infa_shared/BWParam/param_global.txt
- Define Workflow Variable and assign its value in param_global.txt with the session level param file name. Say $$var_param_file=/infa_shared/BWParam/param_runtime.txt
- In the session properties for the session, set the parameter file name to this workflow variable.
- Add $PMMergeSessParamFile=TRUE in the Workflow level Parameter file.
Content of infa_shared/BWParam/param_global.txt
[WorkFolder.WF:wf_runtime_param] $DBConnection_SRC=Info_Src_Conn $DBConnection_TGT=Info_Tgt_Conn $PMMergeSessParamFile=TRUE $$var_param_file=infa_shared/BWParam/param_runtime.txt
Content of infa_shared/BWParam/param_runtime.txt
[WorkFolder.wf:wf_runtime_param.ST:s_m_emp_cdc] $$start_date=2010-11-02 $$end_date=2010-12-08
The $PMMergeSessParamFile property causes the Integration Service to read both the session and workflow parameter files.
Filter Transformation Overview:
1. What is a filter transformation?
A filter transformation is used to filter out the rows in mapping. The filter transformation allows the rows that meet the filter condition to pass through and drops the rows that do not meet the condition. Filter transformation is an active transformation.
2. Can we specify more than one filter condition in a filter transformation?
We can only specify one condition in the filter transformation. To specify more than one condition, we have to use router transformation?
3. In which case a filter transformation acts as passive transformation?
If the filter condition is set to TRUE, then it passes all the rows without filtering any data. In this case, the filter transformation acts as passive transformation.
4. Can we concatenate ports from more than one transformation into the filter transformation?
No. The input ports for the filter must come from a single transformation.
5. How to filter the null values and spaces?
Use the ISNULL and IS_SPACES functions
Example: IIF(ISNULL(commission),FALSE,TRUE)
6. How session performance can be improved by using filter transformation?
Keep the filter transformation as close as possible to the sources in the mapping. This allows the unwanted data to be discarded and the integration service processes only the required rows. If the source is relational source, use the source qualifier to filter the rows.
A filter transformation is used to filter out the rows in mapping. The filter transformation allows the rows that meet the filter condition to pass through and drops the rows that do not meet the condition. Filter transformation is an active transformation.
2. Can we specify more than one filter condition in a filter transformation?
We can only specify one condition in the filter transformation. To specify more than one condition, we have to use router transformation?
3. In which case a filter transformation acts as passive transformation?
If the filter condition is set to TRUE, then it passes all the rows without filtering any data. In this case, the filter transformation acts as passive transformation.
4. Can we concatenate ports from more than one transformation into the filter transformation?
No. The input ports for the filter must come from a single transformation.
5. How to filter the null values and spaces?
Use the ISNULL and IS_SPACES functions
Example: IIF(ISNULL(commission),FALSE,TRUE)
6. How session performance can be improved by using filter transformation?
Keep the filter transformation as close as possible to the sources in the mapping. This allows the unwanted data to be discarded and the integration service processes only the required rows. If the source is relational source, use the source qualifier to filter the rows.
7. What is the Difference between source qualifier filter
and Filter Transformation?
Source qualifier filter only used for
relation source where as filter used any kind of source like Relational table
and flat file
Source qualifier filters data while
reading where as filter before loading into the Target.
Difference between Router and Filter transformation in Informatica:
Router
|
Filter
|
Router transformation provides us the facility to capture the
rows of data that do not meet any of the conditions to a default output
group.
|
A Filter transformation tests data for one condition and drops
the rows of data that do not meet the condition.
|
Router transformation is a single input and multi output group
transformation.
|
Filter is single input and single output group transformation.
|
In a router transformation, you can specify more than one filter
condition.
|
Filter transformation, you can specify only one filter
condition.
|
The router transformation does not block input rows and those
records that failed the filter condition will be passed to the default group
|
In a filter transformation there is chance that records get
blocked
|
Router transformation acts like IIF condition in informatica or
CASE.. WHEN in database.
|
Filter transformation works as WHERE clause of SQL .
|
Advantages of Router Transformation over Filter Transformation
- Better Performance; because in mapping, the Router transformation Informatica server processes the input data only once instead of as many times as you have conditions in Filter transformation.
- Less complexity; because we use only one Router transformation instead of multiple Filter transformation.
- Router transformation is more efficient than the Filter transformation.
For Eg:
We have 3 departments in source now we want to send these records into 3 tables.To achieve this we require only one Router transformation.In case we want to get same result with Filter transformation then we require at least 3 Filter transformations.
Similarity:
A Router and Filter transformation are almost same because both transformations allow you to use a condition to test data.
What is Transformation:
A Transformation is a power center object which allows you to
develop the business rules to process the Data through ports that we connect to
mapping or mapplet.
Two types of Transformations
Active
Transformation.
Passive Transformation
Active Transformation:
A
Transformation which can change the No of rows or affect the no rows when the
data is moving from source to target [destination] is Called Active
Transformation.
Ø Filter Transformation.
Ø Router Transformation.
Ø Source qualifier Transformation
Ø Aggregator Transformation.
Ø Sorter Transformation.
Ø Joiner Transformation
Ø Rank Transformation.
Ø Union Transformation.
Ø Update strategy Transformation
Ø Normalizer Transformation.
Ø Transaction control Transformation.
Ø SQL Transformation
Passive
Transformation:
A
transformation does not change the number of rows .when data is moving from
source to destination is called Passive Transformation.
Ø Expression Transformation.
Ø Sequence generator Transformation.
Ø Lookup Transformation.
Ø Stored Procedure Transformation.
Ø SQL Transformation.
Ø XMK Source qualifier Transformation
All Active Transformations are used to filtering and cleansing the
data.