Monday, July 17, 2017

Detection Strategies

Detection Strategies




Detection Strategies:
A.      NOT EXISTS
B.      MINUS
C.      POST_FLOW
D.      NONE

A.      NOT EXISTS
a.       Load data from source table to C$
b.       Compare to C$ vs Target table with all fields and inserts into I$ if it is not matching with IND_UPDATE flag as ‘I’
c.       Identify update records based on Unique Key field and update the IND_UPDATE flag as ‘U’
d.       Whose flags are ‘U’ those records are updated to target table
e.       Whose flags are ‘I’ those records are inserted to target table

Sample code for step b. as follows:
/* DETECTION_STRATEGY = NOT_EXISTS */
insert into                                                                                                    ODI_TEMP.I$_DEPT
(
                                                                                                                        DEPARTMENT_ID,
                                                                                                                        MANAGER_ID,
                                                                                                                        DEPARTMENT_NAME,
                                                                                                                        IND_UPDATE
)
select
DEPARTMENT_ID,
                                                                                                                        MANAGER_ID,
                                                                                                                        DEPARTMENT_NAME,
                                                                                                                        IND_UPDATE
 from (
select                                                                                                              
                                                                                                                        DEPARTMENTS.DEPARTMENT_ID DEPARTMENT_ID,
                                                                                                                        DEPARTMENTS.MANAGER_ID MANAGER_ID,
                                                                                                                        DEPARTMENTS.DEPARTMENT_NAME DEPARTMENT_NAME,
                                                                                                                        'I' IND_UPDATE
from                                                                                                              REPLICA.DEPARTMENTS DEPARTMENTS
where                                                                                                           (1=1)
) S
where NOT EXISTS
                                                                                                                        ( select 1 from REPLICA.DEPT T
                                                                                                                        where          T.DEPARTMENT_ID         =  S.DEPARTMENT_ID
                                                                                                                                 and (( T.MANAGER_ID = S.MANAGER_ID) or (T.MANAGER_ID IS NULL and S.MANAGER_ID IS NULL)) and
                                                                                                                                ((T.DEPARTMENT_NAME = S.DEPARTMENT_NAME) or (T.DEPARTMENT_NAME IS NULL and S.DEPARTMENT_NAME IS NULL))
        )


  
B.      MINUS
a.       Load data from source table to C$
b.       Compare to C$ vs Target table with minus operator and inserts into I$ if it is not matching with IND_UPDATE flag as ‘I’
c.       Identify update records based on Unique Key field and update the IND_UPDATE flag as ‘U’
d.       Whose flags are ‘U’ those records are updated to target table
e.       Whose flags are ‘I’ those records are inserted to target table
Sample code for step b. as follows:
/* DETECTION_STRATEGY = MINUS */
insert into                                                                                                    ODI_TEMP.I$_DEPT
(
                                                                                                                        DEPARTMENT_ID,
                                                                                                                        MANAGER_ID,
                                                                                                                        DEPARTMENT_NAME,
                                                                                                                        IND_UPDATE
)
select                                                                                                              
                                                                                                                        DEPARTMENTS.DEPARTMENT_ID,
                                                                                                                        DEPARTMENTS.MANAGER_ID,
                                                                                                                        DEPARTMENTS.DEPARTMENT_NAME,
                                                                                                                        'I' IND_UPDATE
from                                                                                                              REPLICA.DEPARTMENTS DEPARTMENTS
where                                                                                                           (1=1)
minus
select
                                                                                                                        DEPARTMENT_ID,
                                                                                                                        MANAGER_ID,
                                                                                                                        DEPARTMENT_NAME,
                                                                                                                        'I'    IND_UPDATE
from                                                                                                              REPLICA.DEPT


C.      POST_FLOW
a.       Load data from source table to C$
b.       Copy from C$ to I$ with IND_UPDATE flag as ‘I’
c.       Identify update records based on Unique Key field and update the IND_UPDATE flag as ‘U’
d.       Identify not updated records by comparing fields with target and update the IND_UPDATE flags as ‘N’
e.       Whose flags are ‘U’ those records are updated to target table
f.        Whose flags are ‘I’ those records are inserted to target table

Sample code for step d. as follows:
/* DETECTION_STRATEGY = POST_FLOW */
update                                                                                                          ODI_TEMP.I$_DEPT S
set                                                                                                                  IND_UPDATE = 'N'
where                                                                                                           exists (
                                                                                                                        select            'X'
                                                                                                                        from              REPLICA.DEPT    T
                                                                                                                        where          T.DEPARTMENT_ID         = S.DEPARTMENT_ID
                                                                                                                                and        ((T.MANAGER_ID = S.MANAGER_ID) or (T.MANAGER_ID IS NULL and S.MANAGER_ID IS NULL))
and                                                                                                                 ((T.DEPARTMENT_NAME = S.DEPARTMENT_NAME) or (T.DEPARTMENT_NAME IS NULL and S.DEPARTMENT_NAME IS NULL))
                                                                                                                        )

D.      NONE
a.       Load data from source table to C$
b.       Copy from C$ to I$ with IND_UPDATE flag as ‘I’
c.       Identify update records based on Unique Key field and update the IND_UPDATE flag as ‘U’
d.       Whose flags are ‘U’ those records are updated to target table
e.       Whose flags are ‘I’ those records are inserted to target table

[Note: It will update all the records whether it got changed or not changed]


No comments:

Post a Comment