ODI Hidden Gems – SNP tables: Query to get load plan execution steps
Hi all,
Today is a short post, but very useful. I often get asked about how to write SNP table queries to get some information from ODI repositories. I posted one about “executed code” here. Today, this is another example of how to get a load plan execution steps that were executed. This one I use in the end of every load plan execution, so it creates a mini report of how each step performed in that load plan. This is useful for ODI Operators, so they can do some analysis of how well their jobs are doing.
This query was created using ODI 12.2.1.4.WITH
LP_STEPS AS (
SELECT SLS.I_LOAD_PLAN
, LP.LOAD_PLAN_NAME
, I.I_LP_INST
, SLS.LP_STEP_NAME
, SLS.I_LP_STEP
, SLS.PAR_I_LP_STEP
, SLS.STEP_ORDER
, LEVEL AS LEVEL_
, SYS_CONNECT_BY_PATH(SLS.LP_STEP_NAME, ' -> ') AS STEP_NAME_PATH
, SYS_CONNECT_BY_PATH(SLS.STEP_ORDER, ' ') AS STEP_ORDER_PATH
, SYS_CONNECT_BY_PATH(SLS.IND_ENABLED, ' ') AS IND_ENABLED_PATH
, SYS_CONNECT_BY_PATH(DECODE(SLS.LP_STEP_TYPE, 'EX', 1, 0), ' ') AS EXCEPTION_STEP_PATH
, CONNECT_BY_ISLEAF IS_LEAF
, SLS.IND_ENABLED
FROM SNP_LOAD_PLAN LP
INNER JOIN SNP_LP_STEP SLS
ON SLS.I_LOAD_PLAN = LP.I_LOAD_PLAN
INNER JOIN SNP_LP_INST I
ON SLS.I_LOAD_PLAN = I.I_LOAD_PLAN
AND I.GLOBAL_ID = '<LOAD_PLAN_INSTANCE_GLOBAL_ID_HERE>'
CONNECT BY PRIOR SLS.I_LP_STEP = SLS.PAR_I_LP_STEP
START WITH SLS.PAR_I_LP_STEP IS NULL
)
, ALL_ AS (
SELECT L.I_LOAD_PLAN
, L.LOAD_PLAN_NAME
, L.I_LP_INST
, L.LP_STEP_NAME
, L.I_LP_STEP
, L.STEP_NAME_PATH
, L.STEP_ORDER_PATH
, CASE WHEN L.IND_ENABLED_PATH LIKE '%0%' THEN 'N' ELSE 'Y' END ENABLED
, MAX(IL.SESS_NO) AS SESS_NO
FROM LP_STEPS L
LEFT JOIN SNP_LPI_STEP_LOG IL
ON L.I_LP_INST = IL.I_LP_INST
AND L.I_LP_STEP = IL.I_LP_STEP
WHERE 1 = 1
AND L.IS_LEAF = 1
AND EXCEPTION_STEP_PATH NOT LIKE '%1%'
GROUP BY L.I_LOAD_PLAN
, L.LOAD_PLAN_NAME
, L.I_LP_INST
, L.LP_STEP_NAME
, L.I_LP_STEP
, L.STEP_NAME_PATH
, L.STEP_ORDER_PATH
, L.IND_ENABLED_PATH
)
SELECT A.I_LOAD_PLAN
, A.I_LP_STEP
, A.LOAD_PLAN_NAME
, A.LP_STEP_NAME
, A.STEP_NAME_PATH
, A.SESS_NO
, CASE WHEN A.ENABLED = 'N' THEN 'Step has been disabled'
WHEN A.SESS_NO IS NULL THEN 'Step did not run'
WHEN S.SESS_STATUS = 'D' THEN 'Step finished successfully'
WHEN S.SESS_STATUS = 'E' THEN 'Step failed'
WHEN S.SESS_STATUS = 'W' THEN 'Step finished with warnings'
ELSE 'Other status not relevant'
END STATUS
, TO_CHAR(S.SESS_BEG, 'DD-MON-YYYY HH24:MI:SS') AS SESS_BEG
, TO_CHAR(S.SESS_END, 'DD-MON-YYYY HH24:MI:SS') AS SESS_END
, S.SESS_DUR
, REPLACE(REPLACE(REPLACE(SUBSTR(S.ERROR_MESSAGE, 1, INSTR(S.ERROR_MESSAGE, CHR(9) || 'at ')), CHR(10), ' '), CHR(13), ' '), CHR(9), ' ') AS ERROR_MESSAGE
FROM ALL_ A
LEFT JOIN SNP_SESSION S
ON A.SESS_NO = S.SESS_NO
ORDER BY A.STEP_ORDER_PATH;
I hope you like it! See you soon!
Leave a Reply