Daghan ang naggamit ug pinasahi nga mga himan sa paghimo og mga pamaagi sa pagkuha, pagbag-o, ug pagkarga sa datos ngadto sa relational database. Ang proseso sa pagtrabaho nga mga himan gi-log, ang mga sayup naayo.
Sa kaso sa usa ka sayup, ang log adunay kasayuran nga ang himan napakyas sa pagkompleto sa buluhaton ug kung unsang mga module (kasagaran java) mihunong kung diin. Sa katapusang mga linya, makit-an nimo ang usa ka sayup sa database, pananglitan, usa ka talaan nga talagsaon nga paglapas sa yawe.
Aron matubag ang pangutana kung unsa ang papel sa kasayuran sa sayup sa ETL, giklasipikar nako ang tanan nga mga problema nga nahitabo sa miaging duha ka tuig sa usa ka dako nga tipiganan.
Ang mga sayup sa database naglakip sa dili igo nga wanang, nawala nga koneksyon, gibitay ang sesyon, ug uban pa.
Ang lohikal nga mga sayup naglakip sama sa paglapas sa mga yawe sa lamesa, dili balido nga mga butang, kakulang sa pag-access sa mga butang, ug uban pa.
Ang scheduler mahimong dili magsugod sa oras, kini mahimong magyelo, ug uban pa.
Ang yano nga mga sayup dili magdugay aron ayohon. Ang usa ka maayo nga ETL makahimo sa pagdumala sa kadaghanan niini sa iyang kaugalingon.
Ang mga komplikadong bug naghimo niini nga gikinahanglan aron madiskobrehan ug masulayan ang mga pamaagi alang sa pagtrabaho uban sa datos, aron masusi ang mga tinubdan sa datos. Kasagaran mosangpot sa panginahanglan alang sa pagbag-o sa pagsulay ug pag-deploy.
Busa, katunga sa tanan nga mga problema may kalabutan sa database. 48% sa tanang sayop kay simple nga sayop.
Ang ikatulo nga bahin sa tanan nga mga problema adunay kalabutan sa pagbag-o sa lohika o modelo sa pagtipig, labaw sa katunga sa kini nga mga sayup komplikado.
Ug walaβy ikaupat nga bahin sa tanan nga mga problema adunay kalabotan sa scheduler sa buluhaton, 18% niini yano nga mga sayup.
Sa kinatibuk-an, ang 22% sa tanan nga mga sayup nga mahitabo komplikado, ug ang ilang pagtul-id nanginahanglan labi ka atensyon ug oras. Kini mahitabo mga kausa sa usa ka semana. Samtang ang mga yanong sayop mahitabo halos kada adlaw.
Dayag, ang pagmonitor sa mga proseso sa ETL mahimong epektibo kung ang lokasyon sa sayup gipakita sa log sa tukma kutob sa mahimo ug ang labing gamay nga oras gikinahanglan aron makit-an ang gigikanan sa problema.
Epektibo nga pagmonitor
Unsa ang gusto nakong makita sa proseso sa pagmonitor sa ETL?
Pagsugod sa - sa dihang nagsugod siya sa trabaho,
Tinubdan - tinubdan sa datos,
Layer - unsa nga lebel sa pagtipig ang gikarga,
Ngalan sa Trabaho sa ETL - pamaagi sa pag-upload, nga naglangkob sa daghang gagmay nga mga lakang,
Numero sa Lakang - ang gidaghanon sa lakang nga gihimo,
Naapektuhan nga mga Laray - pila na ka datos ang naproseso na,
Gidugayon sec - unsa kadugay kini,
Status - maayo man o dili ang tanan: OK, ERROR, RUNNING, HANGS
Mensahe - Katapusan nga malampuson nga mensahe o paghulagway sa sayup.
Base sa status sa mga entry, pwede ka magpadala ug email. sulat sa ubang miyembro. Kung walay mga sayup, nan ang sulat dili kinahanglan.
Busa, kung adunay usa ka sayup, ang lokasyon sa insidente klaro nga gipakita.
Usahay mahitabo nga ang monitoring tool mismo dili molihok. Sa kini nga kaso, posible nga tawagan ang usa ka pagtan-aw (tan-aw) nga direkta sa database, base sa kung diin gitukod ang taho.
ETL monitoring table
Aron ipatuman ang pagmonitor sa mga proseso sa ETL, igo na ang usa ka lamesa ug usa ka pagtan-aw.
Aron mahimo kini, mahimo kang mobalik sa
DDL nga mga lamesa
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);
Tan-awa/Ireport ang 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;
Pagsusi sa SQL kung posible ba makakuha usa ka bag-ong numero sa sesyon
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
Mga bahin sa lamesa:
- ang pagsugod ug pagtapos sa pamaagi sa pagproseso sa datos kinahanglang sundan sa mga lakang ETL_START ug ETL_END
- sa kaso sa usa ka sayop, ang ETL_ERROR lakang uban sa iyang paghulagway kinahanglan nga gibuhat
- ang kantidad sa giproseso nga datos kinahanglan nga ipasiugda, pananglitan, nga adunay mga asterisk
- ang parehas nga pamaagi mahimong sugdan sa parehas nga oras gamit ang force_restart = y parameter, kung wala kini ang numero sa sesyon gihatag lamang sa nahuman nga pamaagi
- sa normal nga mode, dili ka makadagan sa parehas nga pamaagi sa pagproseso sa datos nga managsama
Ang gikinahanglan nga mga operasyon alang sa pagtrabaho sa usa ka lamesa mao ang mosunod:
- pagkuha sa numero sa sesyon sa nagpadagan nga pamaagi sa ETL
- isulod ang log entry sa lamesa
- pagkuha sa katapusang malampuson nga rekord sa usa ka pamaagi sa ETL
Sa mga database sama sa Oracle o Postgres, kini nga mga operasyon mahimong ipatuman ingon mga built-in nga function. Ang sqlite nanginahanglan usa ka eksternal nga mekanismo, ug sa kini nga kaso kini
konklusyon
Sa ingon, ang mga mensahe sa sayup sa mga himan sa pagproseso sa datos adunay hinungdanon nga papel. Apan lisud ang pagtawag kanila nga labing maayo alang sa dali nga pagpangita sa hinungdan sa problema. Kung ang gidaghanon sa mga pamaagi hapit usa ka gatos, nan ang pag-monitor sa proseso nahimo nga usa ka komplikado nga proyekto.
Ang artikulo naghatag usa ka pananglitan sa usa ka posible nga solusyon sa problema sa porma sa usa ka prototype. Ang tibuuk nga gamay nga prototype sa repository magamit sa gitlab
Source: www.habr.com