Professional Documents
Culture Documents
/*
[NAME]
- HANA_ABAP_BatchJobs
[DESCRIPTION]
[SOURCE]
[259]: invalid table name: Could not find table/view TBTCO in schema
- If access to ABAP objects is possible but you cannot log on as ABAP user, you can
switch the default schema before executing the command:
[VALID FOR]
- Revisions: all
- Statistics server type: all
- Client application: ABAP
[INVOLVED TABLES]
- TBTCO
[INPUT PARAMETERS]
- BEGIN_TIME
Begin time
'2018/12/05 14:05:00' --> Set begin time to 5th of December 2018, 14:05
'C' --> Set begin time to current time
'C-S900' --> Set begin time to current time minus 900 seconds
'C-M15' --> Set begin time to current time minus 15 minutes
'C-H5' --> Set begin time to current time minus 5 hours
'C-D1' --> Set begin time to current time minus 1 day
'C-W4' --> Set begin time to current time minus 4 weeks
'E-S900' --> Set begin time to end time minus 900 seconds
'E-M15' --> Set begin time to end time minus 15 minutes
'E-H5' --> Set begin time to end time minus 5 hours
'E-D1' --> Set begin time to end time minus 1 day
'E-W4' --> Set begin time to end time minus 4 weeks
'MIN' --> Set begin time to minimum (1000/01/01 00:00:00)
- END_TIME
End time
'2018/12/08 14:05:00' --> Set end time to 8th of December 2018, 14:05
'C' --> Set end time to current time
'C-S900' --> Set end time to current time minus 900 seconds
'C-M15' --> Set end time to current time minus 15 minutes
'C-H5' --> Set end time to current time minus 5 hours
'C-D1' --> Set end time to current time minus 1 day
'C-W4' --> Set end time to current time minus 4 weeks
'B+S900' --> Set end time to begin time plus 900 seconds
'B+M15' --> Set end time to begin time plus 15 minutes
'B+H5' --> Set end time to begin time plus 5 hours
'B+D1' --> Set end time to begin time plus 1 day
'B+W4' --> Set end time to begin time plus 4 weeks
'MAX' --> Set end time to maximum (9999/12/31 23:59:59)
- JOB_NAME
- USER_NAME
- MIN_DURATION_S
3600 --> Only consider batch jobs with a runtime of at least 3600
seconds
-1 --> No restriction related to batch job duration
- STATUS
Batch job status (check "Modification section" for all possible values)
- EVENTID
- AGGREGATE_BY
- TIME_AGGREGATE_BY
- ORDER_BY
[OUTPUT PARAMETERS]
[EXAMPLE OUTPUT]
-----------------------------------------------------------------------------------
--------------
|START_TIME |JOB_NAME |USER_NAME|STATUS |NUM_JOBS|
TOT_DUR_S |AVG_DUR_S |
-----------------------------------------------------------------------------------
--------------
|2018/12/19 12:15:22|BI_PROCESS_ABAP |MAESTRO |CANCELLED| 1|
182546| 182546.00|
|2018/12/20 04:03:20|BIDTPR_2738970_1 |ALEREMOTE|CANCELLED| 1|
125654| 125654.00|
|2018/12/20 04:03:22|BIDTPR_2738970_1 |ALEREMOTE|CANCELLED| 1|
125648| 125648.00|
|2018/12/20 06:32:34|BIDTPR_2738970_1 |ALEREMOTE|CANCELLED| 1|
116714| 116714.00|
|2018/12/20 07:46:57|BIDTPR_2740096_1 |ALEREMOTE|CANCELLED| 1|
112251| 112251.00|
|2018/12/20 07:54:06|BIDTPR_2740126_1 |ALEREMOTE|CANCELLED| 1|
111822| 111822.00|
|2018/12/20 07:54:05|BIDTPR_2740126_1 |ALEREMOTE|CANCELLED| 1|
111805| 111805.00|
|2018/12/20 08:00:27|BIDTPR_2740126_1 |ALEREMOTE|CANCELLED| 1|
111423| 111423.00|
|2018/12/20 08:29:31|BIDTPR_2740217_1 |ALEREMOTE|CANCELLED| 1|
109697| 109697.00|
|2018/12/20 08:29:33|BIDTPR_2740217_1 |ALEREMOTE|CANCELLED| 1|
109677| 109677.00|
|2018/12/20 08:59:15|BIDTPR_2740217_1 |ALEREMOTE|CANCELLED| 1|
107913| 107913.00|
|2018/12/20 09:29:30|BIDTPR_2740314_1 |ALEREMOTE|CANCELLED| 1|
106098| 106098.00|
|2018/12/20 09:31:42|BIDTPR_2740314_1 |ALEREMOTE|CANCELLED| 1|
105948| 105948.00|
|2018/12/20 09:38:48|BIDTPR_2740329_1 |ALEREMOTE|CANCELLED| 1|
105522| 105522.00|
|2018/12/20 09:55:53|BI_WRITE_PROT_TO_APPLLOG|ABCDEF |CANCELLED| 1|
104497| 104497.00|
|2018/12/22 12:15:10|BI_PROCESS_ABAP |MAESTRO |RUNNING | 1|
93905| 93905.00|
-----------------------------------------------------------------------------------
--------------
*/
START_TIME,
JOB_NAME,
USER_NAME,
STATUS,
EVENTID,
LPAD(WP_PID, 7) WP_PID,
LPAD(NUM_JOBS, 8) NUM_JOBS,
LPAD(DURATION_S, 10) TOT_DUR_S,
LPAD(TO_DECIMAL(MAP(NUM_JOBS, 0, 0, DURATION_S / NUM_JOBS), 10, 2), 10) AVG_DUR_S
FROM
( SELECT
CASE
WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'TIME') != 0 THEN
CASE
WHEN BI.TIME_AGGREGATE_BY LIKE 'TS%' THEN
TO_VARCHAR(ADD_SECONDS(TO_TIMESTAMP('2014/01/01 00:00:00', 'YYYY/MM/DD
HH24:MI:SS'), FLOOR(SECONDS_BETWEEN(TO_TIMESTAMP('2014/01/01 00:00:00',
'YYYY/MM/DD HH24:MI:SS'), J.BEGIN_TIME) / SUBSTR(BI.TIME_AGGREGATE_BY,
3)) * SUBSTR(BI.TIME_AGGREGATE_BY, 3)), 'YYYY/MM/DD HH24:MI:SS')
ELSE TO_VARCHAR(J.BEGIN_TIME, BI.TIME_AGGREGATE_BY)
END
ELSE 'any'
END START_TIME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'JOB') != 0
THEN J.JOB_NAME ELSE MAP(BI.JOB_NAME, '%', 'any', BI.JOB_NAME)
END JOB_NAME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'USER') != 0
THEN J.USER_NAME ELSE MAP(BI.USER_NAME, '%', 'any', BI.USER_NAME)
END USER_NAME,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'STATUS') != 0
THEN J.STATUS ELSE MAP(BI.STATUS, '%', 'any', BI.STATUS)
END STATUS,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'EVENTID') != 0
THEN J.EVENTID ELSE MAP(BI.EVENTID, '%', 'any', BI.EVENTID)
END EVENTID,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'WP_PID') != 0
THEN TO_VARCHAR(J.WPPROCID) ELSE MAP(BI.WP_PID, -1, 'any',
TO_VARCHAR(BI.WP_PID)) END WP_PID,
COUNT(*) NUM_JOBS,
SUM(J.DURATION_S) DURATION_S,
BI.ORDER_BY
FROM
( SELECT
CASE
WHEN BEGIN_TIME = 'C' THEN CURRENT_TIMESTAMP
WHEN BEGIN_TIME LIKE 'C-S%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-S'))
WHEN BEGIN_TIME LIKE 'C-M%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-M') * 60)
WHEN BEGIN_TIME LIKE 'C-H%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-H') * 3600)
WHEN BEGIN_TIME LIKE 'C-D%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-D') * 86400)
WHEN BEGIN_TIME LIKE 'C-W%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(BEGIN_TIME, 'C-W') * 86400 * 7)
WHEN BEGIN_TIME LIKE 'E-S%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-S'))
WHEN BEGIN_TIME LIKE 'E-M%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-M') * 60)
WHEN BEGIN_TIME LIKE 'E-H%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-H') * 3600)
WHEN BEGIN_TIME LIKE 'E-D%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-D') * 86400)
WHEN BEGIN_TIME LIKE 'E-W%' THEN
ADD_SECONDS(TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS'),
-SUBSTR_AFTER(BEGIN_TIME, 'E-W') * 86400 * 7)
WHEN BEGIN_TIME = 'MIN' THEN
TO_TIMESTAMP('1000/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
WHEN SUBSTR(BEGIN_TIME, 1, 1) NOT IN ('C', 'E', 'M') THEN
TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS')
END BEGIN_TIME,
CASE
WHEN END_TIME = 'C' THEN CURRENT_TIMESTAMP
WHEN END_TIME LIKE 'C-S%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-S'))
WHEN END_TIME LIKE 'C-M%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-M') * 60)
WHEN END_TIME LIKE 'C-H%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-H') * 3600)
WHEN END_TIME LIKE 'C-D%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-D') * 86400)
WHEN END_TIME LIKE 'C-W%' THEN
ADD_SECONDS(CURRENT_TIMESTAMP, -SUBSTR_AFTER(END_TIME, 'C-W') * 86400 * 7)
WHEN END_TIME LIKE 'B+S%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+S'))
WHEN END_TIME LIKE 'B+M%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+M') * 60)
WHEN END_TIME LIKE 'B+H%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+H') * 3600)
WHEN END_TIME LIKE 'B+D%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+D') * 86400)
WHEN END_TIME LIKE 'B+W%' THEN
ADD_SECONDS(TO_TIMESTAMP(BEGIN_TIME, 'YYYY/MM/DD HH24:MI:SS'),
SUBSTR_AFTER(END_TIME, 'B+W') * 86400 * 7)
WHEN END_TIME = 'MAX' THEN
TO_TIMESTAMP('9999/12/31 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
WHEN SUBSTR(END_TIME, 1, 1) NOT IN ('C', 'B', 'M') THEN
TO_TIMESTAMP(END_TIME, 'YYYY/MM/DD HH24:MI:SS')
END END_TIME,
JOB_NAME,
USER_NAME,
MIN_DURATION_S,
WP_PID,
STATUS,
EVENTID,
AGGREGATE_BY
AGGREGATE_BY,
MAP(TIME_AGGREGATE_BY,
'NONE', 'YYYY/MM/DD HH24:MI:SS',
'HOUR', 'YYYY/MM/DD HH24',
'DAY', 'YYYY/MM/DD (DY)',
'HOUR_OF_DAY', 'HH24',
TIME_AGGREGATE_BY ) TIME_AGGREGATE_BY,
ORDER_BY
FROM
( SELECT /* Modification section */
'1000/10/18 07:58:00' BEGIN_TIME, /* YYYY/MM/DD HH24:MI:SS
timestamp, C, C-S<seconds>, C-M<minutes>, C-H<hours>, C-D<days>, C-W<weeks>, E-
S<seconds>, E-M<minutes>, E-H<hours>, E-D<days>, E-W<weeks>, MIN */
'MAX' END_TIME, /* YYYY/MM/DD HH24:MI:SS timestamp, C,
C-S<seconds>, C-M<minutes>, C-H<hours>, C-D<days>, C-W<weeks>, B+S<seconds>,
B+M<minutes>, B+H<hours>, B+D<days>, B+W<weeks>, MAX */
'%' JOB_NAME,
'%' USER_NAME,
86400 MIN_DURATION_S,
-1 WP_PID,
'%' STATUS, /* CANCELLED, FINISHED, SCHEDULED, RUNNING,
RELEASED, UNKNOWN, READY, PUT_ACTIVE */
'%' EVENTID,
'TIME' AGGREGATE_BY, /* TIME, JOB, USER, STATUS, EVENTID,
WP_PID or comma separated combinations, NONE for no aggregation */
'YYYY/MM' TIME_AGGREGATE_BY, /* HOUR, DAY, HOUR_OF_DAY or
database time pattern, TS<seconds> for time slice, NONE for no aggregation */
'TIME' ORDER_BY /* TIME, JOB, USER, STATUS, DURATION,
COUNT */
FROM
DUMMY
)
) BI,
( SELECT
BEGIN_TIME,
END_TIME,
SECONDS_BETWEEN(BEGIN_TIME, MAP(END_TIME, NULL, CURRENT_TIMESTAMP, '',
CURRENT_TIMESTAMP, END_TIME)) DURATION_S,
STATUS,
EVENTID,
JOB_NAME,
USER_NAME,
WPPROCID
FROM
( SELECT
TO_TIMESTAMP(STRTDATE || STRTTIME, 'YYYYMMDDHH24MISS') BEGIN_TIME,
MAP(ENDDATE, '00000000', NULL, TO_TIMESTAMP(ENDDATE || ENDTIME,
'YYYYMMDDHH24MISS')) END_TIME,
STATUS,
EVENTID,
JOB_NAME,
USER_NAME,
WPPROCID
FROM
( SELECT
CASE WHEN STRTDATE IN ('00000000', '') THEN SDLDATE ELSE STRTDATE END
STRTDATE,
CASE WHEN STRTDATE IN ('00000000', '') THEN SDLTIME ELSE STRTTIME END
STRTTIME,
MAP(STATUS, 'A', 'CANCELLED', 'F', 'FINISHED', 'P', 'SCHEDULED', 'R',
'RUNNING', 'S', 'RELEASED', 'X', 'UNKNOWN', 'Y', 'READY', 'Z', 'PUT_ACTIVE')
STATUS,
ENDDATE,
ENDTIME,
IFNULL(EVENTID, '') EVENTID,
JOBNAME JOB_NAME,
SDLUNAME USER_NAME,
WPPROCID
FROM
TBTCO
WHERE
STRTDATE != '00000000' OR SDLDATE != '00000000'
)
)
) J
WHERE
J.JOB_NAME LIKE BI.JOB_NAME AND
( TO_VARCHAR(BI.END_TIME, 'YYYY') = '9999' OR J.BEGIN_TIME <= BI.END_TIME ) AND
( J.END_TIME = '' OR J.END_TIME >= BI.BEGIN_TIME ) AND
J.STATUS LIKE BI.STATUS AND
J.EVENTID LIKE BI.EVENTID AND
J.USER_NAME LIKE BI.USER_NAME AND
( BI.WP_PID = -1 OR J.WPPROCID = BI.WP_PID ) AND
( BI.MIN_DURATION_S = -1 OR J.DURATION_S >= BI.MIN_DURATION_S )
GROUP BY
CASE
WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'TIME') != 0 THEN
CASE
WHEN BI.TIME_AGGREGATE_BY LIKE 'TS%' THEN
TO_VARCHAR(ADD_SECONDS(TO_TIMESTAMP('2014/01/01 00:00:00', 'YYYY/MM/DD
HH24:MI:SS'), FLOOR(SECONDS_BETWEEN(TO_TIMESTAMP('2014/01/01 00:00:00',
'YYYY/MM/DD HH24:MI:SS'), J.BEGIN_TIME) / SUBSTR(BI.TIME_AGGREGATE_BY,
3)) * SUBSTR(BI.TIME_AGGREGATE_BY, 3)), 'YYYY/MM/DD HH24:MI:SS')
ELSE TO_VARCHAR(J.BEGIN_TIME, BI.TIME_AGGREGATE_BY)
END
ELSE 'any'
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'JOB') != 0
THEN J.JOB_NAME ELSE MAP(BI.JOB_NAME, '%', 'any', BI.JOB_NAME)
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'USER') != 0
THEN J.USER_NAME ELSE MAP(BI.USER_NAME, '%', 'any', BI.USER_NAME)
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'STATUS') != 0
THEN J.STATUS ELSE MAP(BI.STATUS, '%', 'any', BI.STATUS)
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'EVENTID') != 0
THEN J.EVENTID ELSE MAP(BI.EVENTID, '%', 'any', BI.EVENTID)
END,
CASE WHEN BI.AGGREGATE_BY = 'NONE' OR INSTR(BI.AGGREGATE_BY, 'WP_PID') != 0
THEN TO_VARCHAR(J.WPPROCID) ELSE MAP(BI.WP_PID, -1, 'any',
TO_VARCHAR(BI.WP_PID)) END,
BI.ORDER_BY
)
ORDER BY
MAP(ORDER_BY, 'JOB', JOB_NAME, 'USER', USER_NAME, 'STATUS', STATUS),
MAP(ORDER_BY, 'DURATION', DURATION_S, 'COUNT', NUM_JOBS) DESC,
START_TIME DESC