рд╕рд╛рдиреЛ рдбрд╛рдЯрд╛ рдЧреЛрджрд╛рдордорд╛ ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджреИ

рдзреЗрд░реИрд▓реЗ рд░рд┐рд▓реЗрд╕рдирд▓ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдбрд╛рдЯрд╛ рдирд┐рдХрд╛рд▓реНрдиреЗ, рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗ рд░ рд▓реЛрдб рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рдХрд╛рдо рдЧрд░реНрдиреЗ рдЙрдкрдХрд░рдгрд╣рд░реВрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рдЧ рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫ, рддреНрд░реБрдЯрд┐рд╣рд░реВ рдирд┐рд╢реНрдЪрд┐рдд рдЫрдиреНред

рддреНрд░реБрдЯрд┐рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд▓рдЧрдорд╛ рдЙрдкрдХрд░рдгрд▓реЗ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдЧрд░реНрди рдЕрд╕рдлрд▓ рднрдпреЛ рд░ рдХреБрди рдореЛрдбреНрдпреБрд▓рд╣рд░реВ (рдкреНрд░рд╛рдп: java) рдХрд╣рд╛рдБ рд░реЛрдХрд┐рдпреЛ рднрдиреНрдиреЗ рдЬрд╛рдирдХрд╛рд░реА рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдЕрдиреНрддрд┐рдо рдкрдЩреНрдХреНрддрд┐рд╣рд░реВрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕ рддреНрд░реБрдЯрд┐ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрд╛рд▓рд┐рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдЮреНрдЬреА рдЙрд▓реНрд▓рдЩреНрдШрдиред

ETL рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реАрд▓реЗ рдХрд╕реНрддреЛ рднреВрдорд┐рдХрд╛ рдЦреЗрд▓реНрдЫ рднрдиреНрдиреЗ рдкреНрд░рд╢реНрдирдХреЛ рдЬрд╡рд╛рдл рджрд┐рди, рдореИрд▓реЗ рд╡рд┐рдЧрдд рджреБрдИ рд╡рд░реНрд╖рдорд╛ рднрдПрдХрд╛ рд╕рдмреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрд▓рд╛рдИ рдмрд░реБ рдареВрд▓реЛ рднрдгреНрдбрд╛рд░рдорд╛ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реЗрдХреЛ рдЫреБред

рд╕рд╛рдиреЛ рдбрд╛рдЯрд╛ рдЧреЛрджрд╛рдордорд╛ ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджреИ

рдбрд╛рдЯрд╛рдмреЗрд╕ рддреНрд░реБрдЯрд┐рд╣рд░реВрдорд╛ рдкрд░реНрдпрд╛рдкреНрдд рдард╛рдЙрдБ рдЫреИрди, рдЬрдбрд╛рди рд╣рд░рд╛рдПрдХреЛ, рд╕реЗрд╕рди рд╣рдЩ, рдЖрджрд┐ рд╕рдорд╛рд╡реЗрд╢ рдЫред

рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреН рдЬрд╕реНрддреИ рддрд╛рд▓рд┐рдХрд╛ рдХреБрдЮреНрдЬреАрд╣рд░реВрдХреЛ рдЙрд▓реНрд▓рдЩреНрдШрди, рдЧреИрд░-рд╡реИрдз рд╡рд╕реНрддреБрд╣рд░реВ, рд╡рд╕реНрддреБрд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪрдХреЛ рдХрдореА, рдЖрджрд┐ред
рдЕрдиреБрд╕реВрдЪрдХ рд╕рдордпрдорд╛ рд╕реБрд░реБ рдирд╣реБрди рд╕рдХреНрдЫ, рдпреЛ рд╕реНрдерд┐рд░ рд╣реБрди рд╕рдХреНрдЫ, рдЖрджрд┐ред

рд╕рд╛рдзрд╛рд░рдг рдЧрд▓реНрддреАрд╣рд░реВ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрджреИрдиред рдПрдХ рд░рд╛рдореНрд░реЛ ETL рд▓реЗ рддреА рдордзреНрдпреЗ рдзреЗрд░реИрд▓рд╛рдИ рдЖрдлреИрдВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕рдХреНрдЫред

рдЬрдЯрд┐рд▓ рдмрдЧрд╣рд░реВрд▓реЗ рдбрд╛рдЯрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрди, рдбрд╛рдЯрд╛рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдмрдирд╛рдЙрдБрджрдЫред рдЕрдХреНрд╕рд░ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░реАрдХреНрд╖рдг рд░ рддреИрдирд╛рддреА рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдиреЗрддреГрддреНрд╡ред

рддреНрдпрд╕реЛрднрдП, рд╕рдмреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдЖрдзрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫрдиреНред рд╕рдмреИ рдЧрд▓реНрддреАрд╣рд░реВрдХреЛ 48% рд╕рд╛рдзрд╛рд░рдг рдЧрд▓реНрддреАрд╣рд░реВ рд╣реБрдиреНред
рд╕рдмреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдПрдХ рддрд┐рд╣рд╛рдЗ рднрдгреНрдбрд╛рд░рдг рддрд░реНрдХ рд╡рд╛ рдореЛрдбреЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫрдиреН, рдпреА рддреНрд░реБрдЯрд┐рд╣рд░реВ рдордзреНрдпреЗ рдЖрдзрд╛ рднрдиреНрджрд╛ рдмрдвреА рдЬрдЯрд┐рд▓ рдЫрдиреНред

рд░ рд╕рдмреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдПрдХ рдЪреМрдерд╛рдИ рднрдиреНрджрд╛ рдХрдо рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪрдХрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫрдиреН, рдЬрд╕рдордзреНрдпреЗ 18% рд╕рд╛рдзрд╛рд░рдг рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЫрдиреНред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╕рдмреИ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдордзреНрдпреЗ 22% рдЬрдЯрд┐рд▓ рд╣реБрдиреНрдЫрдиреН, рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕реБрдзрд╛рд░рд▓рд╛рдИ рдзреЗрд░реИ рдзреНрдпрд╛рди рд░ рд╕рдордп рдЪрд╛рд╣рд┐рдиреНрдЫред рддрд┐рдиреАрд╣рд░реВ рд╣рдкреНрддрд╛рдорд╛ рдПрдХ рдкрдЯрдХ рд╣реБрдиреНрдЫрдиреНред рдЬрдмрдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдЧрд▓реНрддреАрд╣рд░реВ рд▓рдЧрднрдЧ рд╣рд░реЗрдХ рджрд┐рди рд╣реБрдиреНрдЫрдиреНред

рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛, ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рдЕрдиреБрдЧрдорди рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд╣реБрдиреЗрдЫ рдЬрдм рддреНрд░реБрдЯрд┐рдХреЛ рд╕реНрдерд╛рди рд▓рдЧрдорд╛ рдпрдерд╛рд╕рдореНрднрд╡ рд╕рд╣реА рд░реВрдкрдорд╛ рд╕рдВрдХреЗрдд рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕реНрд░реЛрдд рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдиреНрдпреВрдирддрдо рд╕рдордп рдЖрд╡рд╢реНрдпрдХ рдЫред

рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рдЕрдиреБрдЧрдорди

рдо ETL рдЕрдиреБрдЧрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдХреЗ рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ?

рд╕рд╛рдиреЛ рдбрд╛рдЯрд╛ рдЧреЛрджрд╛рдордорд╛ ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджреИ
рдорд╛ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН - рдЬрдм рдЙрд╕рд▓реЗ рдХрд╛рдо рд╕реБрд░реБ рдЧрд░реНрдпреЛ,
рд╕реНрд░реЛрдд - рдбрд╛рдЯрд╛ рд╕реНрд░реЛрдд,
рддрд╣ - рдХреБрди рд╕реНрддрд░рдХреЛ рднрдгреНрдбрд╛рд░рдг рд▓реЛрдб рднрдЗрд░рд╣реЗрдХреЛ рдЫ,
ETL рдЬрд╛рдЧрд┐рд░рдХреЛ рдирд╛рдо - рдЕрдкрд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдЬрд╕рдорд╛ рдзреЗрд░реИ рд╕рд╛рдирд╛ рдЪрд░рдгрд╣рд░реВ рд╣реБрдиреНрдЫрдиреН,
рдЪрд░рдг рд╕рдВрдЦреНрдпрд╛ - рдкреНрд░рджрд░реНрд╢рди рднрдЗрд░рд╣реЗрдХреЛ рдЪрд░рдг рдХреЛ рд╕рдВрдЦреНрдпрд╛,
рдкреНрд░рднрд╛рд╡рд┐рдд рдкрдЩреНрдХреНрддрд┐рд╣рд░реВ - рдХрддрд┐ рдбрд╛рдЯрд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рдкреНрд░рд╢реЛрдзрди рдЧрд░рд┐рдПрдХреЛ рдЫ,
рдЕрд╡рдзрд┐ рд╕реЗрдХреЗрдиреНрдб - рдХрддрд┐ рд╕рдордп рд▓рд╛рдЧреНрдЫ,
рд╕реНрдерд┐рддрд┐ - рд╕рдмреИ рдареАрдХ рдЫ рд╡рд╛ рдЫреИрди: рдареАрдХ рдЫ, рддреНрд░реБрдЯрд┐, рдЪрд▓рд┐рд░рд╣реЗрдХреЛ, рд╣реНрдпрд╛рдЩреНрдЧреНрд╕
рд╕рдиреНрджреЗрд╢ - рдЕрдиреНрддрд┐рдо рд╕рдлрд▓ рд╕рдиреНрджреЗрд╢ рд╡рд╛ рддреНрд░реБрдЯрд┐ рд╡рд┐рд╡рд░рдгред

рд░реЗрдХрд░реНрдб рдХреЛ рд╕реНрдерд┐рддрд┐ рдорд╛ рдЖрдзрд╛рд░рд┐рдд, рддрдкрд╛рдИрдВ рдПрдХ рдИрдореЗрд▓ рдкрдард╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЕрдиреНрдп рд╕рджрд╕реНрдпрд╣рд░реВрд▓рд╛рдИ рдкрддреНрд░ред рдпрджрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЫреИрдирдиреН рднрдиреЗ, рдкрддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред

рдпрд╕рд░реА, рддреНрд░реБрдЯрд┐рдХреЛ рдШрдЯрдирд╛рдорд╛, рдШрдЯрдирд╛рдХреЛ рд╕реНрдерд╛рди рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рд╕рдВрдХреЗрдд рдЧрд░рд┐рдПрдХреЛ рдЫред

рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдпреЛ рд╣реБрдиреНрдЫ рдХрд┐ рдирд┐рдЧрд░рд╛рдиреА рдЙрдкрдХрд░рдг рдЖрдлреИрд▓реЗ рдХрд╛рдо рдЧрд░реНрджреИрдиред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕реАрдзрд╛ рджреГрд╢реНрдп (рджреГрд╢реНрдп) рдХрд▓ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫ, рдЬрд╕рдХреЛ рдЖрдзрд╛рд░рдорд╛ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдЗрдПрдХреЛ рдЫред

ETL рдирд┐рдЧрд░рд╛рдиреА рддрд╛рд▓рд┐рдХрд╛

ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рдЕрдиреБрдЧрдорди рд▓рд╛рдЧреВ рдЧрд░реНрди, рдПрдЙрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рд░ рдПрдЙрдЯрд╛ рджреГрд╢реНрдп рдкрд░реНрдпрд╛рдкреНрдд рдЫред

рдпреЛ рдЧрд░реНрди, рддрдкрд╛рдИрдВ рдорд╛ рдлрд░реНрдХрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рддрдкрд╛рдИрдВрдХреЛ рд╕рд╛рдиреЛ рднрдгреНрдбрд╛рд░рдг рд░ sqlite рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

DDL рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ

CREATE TABLE UTL_JOB_STATUS (
/* Table for logging of job execution log. Important that the job has the steps ETL_START and ETL_END or ETL_ERROR */
  UTL_JOB_STATUS_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  SID               INTEGER NOT NULL DEFAULT -1, /* Session Identificator. Unique for every Run of job */
  LOG_DT            INTEGER NOT NULL DEFAULT 0,  /* Date time */
  LOG_D             INTEGER NOT NULL DEFAULT 0,  /* Date */
  JOB_NAME          TEXT NOT NULL DEFAULT 'N/A', /* Job name like JOB_STG2DM_GEO */
  STEP_NAME         TEXT NOT NULL DEFAULT 'N/A', /* ETL_START, ... , ETL_END/ETL_ERROR */
  STEP_DESCR        TEXT,                        /* Description of task or error message */
  UNIQUE (SID, JOB_NAME, STEP_NAME)
);
INSERT INTO UTL_JOB_STATUS (UTL_JOB_STATUS_ID) VALUES (-1);

DDL рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН/рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН

CREATE VIEW IF NOT EXISTS UTL_JOB_STATUS_V
AS /* Content: Package Execution Log for last 3 Months. */
WITH SRC AS (
  SELECT LOG_D,
    LOG_DT,
    UTL_JOB_STATUS_ID,
    SID,
	CASE WHEN INSTR(JOB_NAME, 'FTP') THEN 'TRANSFER' /* file transfer */
	     WHEN INSTR(JOB_NAME, 'STG') THEN 'STAGE' /* stage */
	     WHEN INSTR(JOB_NAME, 'CLS') THEN 'CLEANSING' /* cleansing */
	     WHEN INSTR(JOB_NAME, 'DIM') THEN 'DIMENSION' /* dimension */
	     WHEN INSTR(JOB_NAME, 'FCT') THEN 'FACT' /* fact */
		 WHEN INSTR(JOB_NAME, 'ETL') THEN 'STAGE-MART' /* data mart */
	     WHEN INSTR(JOB_NAME, 'RPT') THEN 'REPORT' /* report */
	     ELSE 'N/A' END AS LAYER,
	CASE WHEN INSTR(JOB_NAME, 'ACCESS') THEN 'ACCESS LOG' /* source */
	     WHEN INSTR(JOB_NAME, 'MASTER') THEN 'MASTER DATA' /* source */
	     WHEN INSTR(JOB_NAME, 'AD-HOC') THEN 'AD-HOC' /* source */
	     ELSE 'N/A' END AS SOURCE,
    JOB_NAME,
    STEP_NAME,
    CASE WHEN STEP_NAME='ETL_START' THEN 1 ELSE 0 END AS START_FLAG,
    CASE WHEN STEP_NAME='ETL_END' THEN 1 ELSE 0 END AS END_FLAG,
    CASE WHEN STEP_NAME='ETL_ERROR' THEN 1 ELSE 0 END AS ERROR_FLAG,
    STEP_NAME || ' : ' || STEP_DESCR AS STEP_LOG,
	SUBSTR( SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), 1, INSTR(SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), '***')-2 ) AS AFFECTED_ROWS
  FROM UTL_JOB_STATUS
  WHERE datetime(LOG_D, 'unixepoch') >= date('now', 'start of month', '-3 month')
)
SELECT JB.SID,
  JB.MIN_LOG_DT AS START_DT,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS LOG_DT,
  JB.SOURCE,
  JB.LAYER,
  JB.JOB_NAME,
  CASE
  WHEN JB.ERROR_FLAG = 1 THEN 'ERROR'
  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 AND strftime('%s','now') - JB.MIN_LOG_DT > 0.5*60*60 THEN 'HANGS' /* half an hour */
  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 THEN 'RUNNING'
  ELSE 'OK'
  END AS STATUS,
  ERR.STEP_LOG     AS STEP_LOG,
  JB.CNT           AS STEP_CNT,
  JB.AFFECTED_ROWS AS AFFECTED_ROWS,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS JOB_START_DT,
  strftime('%d.%m.%Y %H:%M', datetime(JB.MAX_LOG_DT, 'unixepoch')) AS JOB_END_DT,
  JB.MAX_LOG_DT - JB.MIN_LOG_DT AS JOB_DURATION_SEC
FROM
  ( SELECT SID, SOURCE, LAYER, JOB_NAME,
           MAX(UTL_JOB_STATUS_ID) AS UTL_JOB_STATUS_ID,
           MAX(START_FLAG)       AS START_FLAG,
           MAX(END_FLAG)         AS END_FLAG,
           MAX(ERROR_FLAG)       AS ERROR_FLAG,
           MIN(LOG_DT)           AS MIN_LOG_DT,
           MAX(LOG_DT)           AS MAX_LOG_DT,
           SUM(1)                AS CNT,
           SUM(IFNULL(AFFECTED_ROWS, 0)) AS AFFECTED_ROWS
    FROM SRC
    GROUP BY SID, SOURCE, LAYER, JOB_NAME
  ) JB,
  ( SELECT UTL_JOB_STATUS_ID, SID, JOB_NAME, STEP_LOG
    FROM SRC
    WHERE 1 = 1
  ) ERR
WHERE 1 = 1
  AND JB.SID = ERR.SID
  AND JB.JOB_NAME = ERR.JOB_NAME
  AND JB.UTL_JOB_STATUS_ID = ERR.UTL_JOB_STATUS_ID
ORDER BY JB.MIN_LOG_DT DESC, JB.SID DESC, JB.SOURCE;

SQL рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ рдпрджрд┐ рдпреЛ рдирдпрд╛рдБ рд╕рддреНрд░ рдирдореНрдмрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫ

SELECT SUM (
  CASE WHEN start_job.JOB_NAME IS NOT NULL AND end_job.JOB_NAME IS NULL /* existed job finished */
	    AND NOT ( 'y' = 'n' ) /* force restart PARAMETER */
       THEN 1 ELSE 0
  END ) AS IS_RUNNING
  FROM
    ( SELECT 1 AS dummy FROM UTL_JOB_STATUS WHERE sid = -1) d_job
  LEFT OUTER JOIN
    ( SELECT JOB_NAME, SID, 1 AS dummy
      FROM UTL_JOB_STATUS
      WHERE JOB_NAME = 'RPT_ACCESS_LOG' /* job name PARAMETER */
	    AND STEP_NAME = 'ETL_START'
      GROUP BY JOB_NAME, SID
    ) start_job /* starts */
  ON d_job.dummy = start_job.dummy
  LEFT OUTER JOIN
    ( SELECT JOB_NAME, SID
      FROM UTL_JOB_STATUS
      WHERE JOB_NAME = 'RPT_ACCESS_LOG'  /* job name PARAMETER */
	    AND STEP_NAME in ('ETL_END', 'ETL_ERROR') /* stop status */
      GROUP BY JOB_NAME, SID
    ) end_job /* ends */
  ON start_job.JOB_NAME = end_job.JOB_NAME
     AND start_job.SID = end_job.SID

рддрд╛рд▓рд┐рдХрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ:

  • рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд╕реБрд░реБ рд░ рдЕрдиреНрддреНрдп ETL_START рд░ ETL_END рдХреЛ рдЪрд░рдгрд╣рд░реВ рдкрд╛рд▓рдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫред
  • рддреНрд░реБрдЯрд┐ рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛, рдпрд╕рдХреЛ рд╡рд┐рд╡рд░рдг рд╕рдВрдЧ ETL_ERROR рдЪрд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫ
  • рдкреНрд░рд╢реЛрдзрд┐рдд рдбрд╛рдЯрд╛ рдХреЛ рдорд╛рддреНрд░рд╛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░рд┐рдиреБ рдкрд░реНрдЫ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рддрд╛рд░рд╛рд╣рд░реБ рд╕рдВрдЧ
  • рдЙрд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ force_restart=y рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд╕рд╛рде рдПрдХреИ рд╕рдордпрдорд╛ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдпреЛ рдмрд┐рдирд╛ рд╕рддреНрд░ рдирдореНрдмрд░ рдорд╛рддреНрд░ рдкреВрд░рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдЬрд╛рд░реА рдЧрд░рд┐рдиреНрдЫред
  • рд╕рд╛рдорд╛рдиреНрдп рдореЛрдбрдорд╛, рддрдкрд╛рдЗрдБ рд╕рдорд╛рдирд╛рдиреНрддрд░рдорд╛ рд╕рдорд╛рди рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрди

рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрди рдХреЛ рд▓рд╛рдЧреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╣рд░реБ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЫрдиреН:

  • рдЪрд▓рд┐рд░рд╣реЗрдХреЛ ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рд╕рддреНрд░ рдирдореНрдмрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ
  • рддрд╛рд▓рд┐рдХрд╛рдорд╛ рд▓рдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдЕрдиреНрддрд┐рдо рд╕рдлрд▓ рд░реЗрдХрд░реНрдб рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ

Oracle рд╡рд╛ Postgres рдЬрд╕реНрддрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВрдорд╛, рдпреА рдХрд╛рд░реНрдпрд╣рд░реВ рдмрд┐рд▓реНрдЯ-рдЗрди рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред sqlite рд▓рд╛рдИ рдмрд╛рд╣реНрдп рд╕рдВрдпрдиреНрддреНрд░ рдЪрд╛рд╣рд┐рдиреНрдЫ, рд░ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ PHP рдорд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк.

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

рддрд╕рд░реНрде, рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдЩ рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢рд╣рд░реВрд▓реЗ рдареВрд▓реЛ-рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдЦреЗрд▓реНрдЫред рддрд░ рд╕рдорд╕реНрдпрд╛рдХреЛ рдХрд╛рд░рдг рдЫрд┐рдЯреНрдЯреИ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЗрд╖реНрдЯрддрдо рднрдиреНрди рдЧрд╛рд╣реНрд░реЛ рдЫред рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕рдп рдкреБрдЧреНрдЫ, рддрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдЧрдорди рдЬрдЯрд┐рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдкрд░рд┐рдгрдд рд╣реБрдиреНрдЫред

рд▓реЗрдЦ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд░реВрдк рдорд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдореНрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рд╕рдореНрдкреВрд░реНрдг рд╕рд╛рдиреЛ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк gitlab рдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ SQLite PHP ETL рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╣рд░реВ.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди