Let
us drive the point home using a simple scenario. For eg., in the current month
ie.,(01-01-2010) we are provided with an source table with the three columns
and three rows in it like (EMpno,Ename,Sal). There is a new employee added and
one change in the records in the month (01-02-2010). We are gonna use the SCD-2
style to extract and load the records in to target table.
- The thing to be
noticed here is if there is any update in the salary of any employee then
the history of that employee is displayed with the current date as the
start date and the previous date as the end date.
Source
Table: (01-01-11)
Emp
no
|
Ename
|
Sal
|
101
|
A
|
1000
|
102
|
B
|
2000
|
103
|
C
|
3000
|
Target
Table: (01-01-11)
Skey
|
Emp
no
|
Ename
|
Sal
|
S-date
|
E-date
|
Ver
|
Flag
|
100
|
101
|
A
|
1000
|
01-01-10
|
Null
|
1
|
1
|
200
|
102
|
B
|
2000
|
01-01-10
|
Null
|
1
|
1
|
300
|
103
|
C
|
3000
|
01-01-10
|
Null
|
1
|
1
|
Source
Table: (01-02-11)
Emp
no
|
Ename
|
Sal
|
101
|
A
|
1000
|
102
|
B
|
2500
|
103
|
C
|
3000
|
104
|
D
|
4000
|
Target
Table: (01-02-11)
Skey
|
Emp
no
|
Ename
|
Sal
|
S-date
|
E-date
|
Ver
|
Flag
|
100
|
101
|
A
|
1000
|
01-02-10
|
Null
|
1
|
1
|
200
|
102
|
B
|
2000
|
01-02-10
|
Null
|
1
|
1
|
300
|
103
|
C
|
3000
|
01-02-10
|
Null
|
1
|
1
|
201
|
102
|
B
|
2500
|
01-02-10
|
01-01-10
|
2
|
0
|
400
|
104
|
D
|
4000
|
01-02-10
|
Null
|
1
|
1
|
In
the second Month we have one more employee added up to the table with the Ename
D and salary of the Employee is changed to the 2500 instead of 2000.
Step
1:
Is to import Source Table and Target table.
- Create a table
by name emp_source with three columns as shown above in oracle.
- Import the
source from the source analyzer.
- Drag the Target
table twice on to the mapping designer to facilitate insert or update
process.
- Go to the
targets Menu and click on generate and execute to confirm the creation of
the target tables.
- The snap shot of
the connections using different kinds of transformations are shown below.
- In The Target
Table we are goanna add five columns (Skey, Version, Flag, S_date
,E_Date).
Step
2:
Design the mapping and apply the necessary transformation.
- Here in this
transformation we are about to use four kinds of transformations namely
Lookup transformation (1), Expression Transformation (3), Filter
Transformation (2), Sequence Generator. Necessity and the usage of all the
transformations will be discussed in detail below.
Look
up Transformation: The purpose of this transformation is to Lookup on the
target table and to compare the same with the Source using the Lookup
Condition.
- The first thing
that we are gonna do is to create a look up transformation and connect the
Empno from the source qualifier to the transformation.
- The snapshot of
choosing the Target table is shown below.
- Drag the Empno
column from the Source Qualifier to the Lookup Transformation.
- The Input Port
for only the Empno1 should be checked.
- In the
Properties tab (i) Lookup table name ->Emp_Target.
(ii)Look
up Policy on Multiple Mismatch -> use Last Value.
(iii)
Connection Information ->Oracle.
- In the
Conditions tab (i) Click on Add a new condition
(ii)Lookup
Table Column should be Empno, Transformation port should be Empno1 and Operator
should ‘=’.
Expression
Transformation: After we are done with the Lookup
Transformation we are using an expression transformation to find whether the
data on the source table matches with the target table. We specify the
condition here whether to insert or to update the table. The steps to create an
Expression Transformation are shown below.
- Drag all the
columns from both the source and the look up transformation and drop them
all on to the Expression transformation.
- Now double click
on the Transformation and go to the Ports tab and create two new columns
and name it as insert and update. Both these columns are goanna be our
output data so we need to have unchecked input check box.
- The Snap shot
for the Edit transformation window is shown below.
- The condition
that we want to parse through our output data are listed below.
Insert
: IsNull(EmpNO1)
Update:
iif(Not isnull (Skey) and Decode(SAL,SAL1,1,0)=0,1,0) .
- We are all done
here .Click on apply and then OK.
Filter
Transformation: We need two filter transformations the
purpose the first filter is to filter out the records which we are goanna
insert and the next is vice versa.
- If there is no
change in input data then filter transformation 1 forwards the complete
input to Exp 1 and same output is goanna appear in the target table.
- If there is any
change in input data then filter transformation 2 forwards the complete
input to the Exp 2 then it is gonna forward the updated input to the
target table.
- Go to the
Properties tab on the Edit transformation
(i)
The value for the filter condition 1 is Insert.
(ii)
The value for the filter condition 2 is Update.
- The closer view
of the connections from the expression to the filter is shown below.
Sequence
Generator: We use this to generate an incremental
cycle of sequential range of number.The purpose of this in our mapping is to
increment the skey in the bandwidth of 100.
- We are gonna
have a sequence generator and the purpose of the sequence generator is to
increment the values of the skey in the multiples of 100 (bandwidth of
100).
- Connect the
output of the sequence transformation to the Exp 1.
Expression
Transformation:
Exp
1: It
updates the target table with the skey values. Point to be noticed here is skey
gets multiplied by 100 and a new row is generated if there is any new EMP added
to the list. Else the there is no modification done on the target table.
- Drag all the
columns from the filter 1 to the Exp 1.
- Now add a new
column as N_skey and the expression for it is gonna be Nextval1*100.
- We are goanna
make the s-date as the o/p and the expression for it is sysdate.
- Flag is also
made as output and expression parsed through it is 1.
- Version is also
made as output and expression parsed through it is 1.
Exp
2: If
same employee is found with any updates in his records then Skey gets added by
1 and version changes to the next higher number,F
- Drag all the
columns from the filter 2 to the Exp 2.
- Now add a new
column as N_skey and the expression for it is gonna be Skey+1.
- Both the S_date
and E_date is gonna be sysdate.
Exp
3: If
any record of in the source table gets updated then we make it only as the
output.
- If change is
found then we are gonna update the E_Date to S_Date.
Update
Strategy: This is place from where the update instruction is set on
the target table.
- The update
strategy expression is set to 1.
Step
3:
Create the task and Run the work flow.
- Don’t check the
truncate table option.
- Change Bulk to
the Normal.
- Run the work
flow from task.
- Create the task
and run the work flow.
Step
4:
Preview the Output in the target table.