A’ cumail sùil air pròiseasan ETL ann an taigh-bathair dàta beag

Bidh mòran a’ cleachdadh innealan sònraichte gus modhan-obrach a chruthachadh airson dàta a tharraing, a chruth-atharrachadh agus a luchdachadh gu stòran-dàta co-cheangailte. Tha pròiseas innealan obrach air a chlàradh, tha mearachdan air an suidheachadh.

Ma tha mearachd ann, tha fiosrachadh anns an loga nach do shoirbhich leis an inneal an obair a choileanadh agus dè na modalan (gu tric java) a chuir stad air càite. Anns na loidhnichean mu dheireadh, gheibh thu mearachd stòr-dàta, mar eisimpleir, clàr briseadh iuchair sònraichte.

Gus a ’cheist a fhreagairt dè an àite a th’ aig fiosrachadh mearachd ETL, tha mi air na duilgheadasan uile a tha air tachairt thar an dà bhliadhna a dh ’fhalbh a sheòrsachadh ann an stòr caran mòr.

A’ cumail sùil air pròiseasan ETL ann an taigh-bathair dàta beag

Tha mearachdan stòr-dàta a’ toirt a-steach àite gu leòr, ceangal air chall, seisean crochte, msaa.

Tha mearachdan loidsigeach a’ toirt a-steach leithid briseadh iuchraichean bùird, nithean neo-dhligheach, dìth ruigsinneachd air nithean, msaa.
Is dòcha nach tòisich an clàr-ama ann an àm, faodaidh e reothadh, msaa.

Cha toir mearachdan sìmplidh fada airson an ceartachadh. Faodaidh ETL math a’ mhòr-chuid dhiubh a làimhseachadh leis fhèin.

Tha bugaichean iom-fhillte ga dhèanamh riatanach dòighean-obrach a lorg agus a dhearbhadh airson obrachadh le dàta, gus stòran dàta a sgrùdadh. Gu math tric bidh feum air deuchainn atharrachaidh agus cleachdadh.

Mar sin, tha leth de na duilgheadasan uile co-cheangailte ris an stòr-dàta. Tha 48% de na mearachdan uile nan mearachdan sìmplidh.
Tha an treas cuid de na duilgheadasan uile co-cheangailte ri bhith ag atharrachadh loidsig no modail stòraidh, tha còrr air leth de na mearachdan sin iom-fhillte.

Agus tha nas lugha na cairteal de na duilgheadasan uile co-cheangailte ris a’ chlàr gnìomh, agus tha 18% dhiubh nam mearachdan sìmplidh.

San fharsaingeachd, tha 22% de na mearachdan uile a tha a 'tachairt iom-fhillte, agus feumaidh an ceartachadh an aire agus an ùine as motha. Bidh iad a’ tachairt timcheall air uair san t-seachdain. Ged a tha mearachdan sìmplidh a 'tachairt cha mhòr a h-uile latha.

Gu dearbh, bidh sgrùdadh air pròiseasan ETL èifeachdach nuair a tha suidheachadh na mearachd air a chomharrachadh anns an log cho ceart ‘s a ghabhas agus a dh’ fheumar an ùine as lugha gus stòr na duilgheadas a lorg.

Sgrùdadh èifeachdach

Dè bha mi airson fhaicinn ann am pròiseas sgrùdaidh ETL?

A’ cumail sùil air pròiseasan ETL ann an taigh-bathair dàta beag
Tòisich aig - nuair a thòisich e air obair,
Stòr - stòr dàta,
Sreath - dè an ìre de stòradh ga luchdachadh,
Ainm Obrach ETL - modh luchdachadh suas, anns a bheil mòran cheumannan beaga,
Àireamh Ceum - àireamh a 'cheum a thathar a' coileanadh,
Sreathan air a bheil buaidh - dè an ìre de dhàta a chaidh a phròiseasadh mu thràth,
Ùine sec - dè cho fada ‘s a bheir e,
Inbhe - ge bith a bheil a h-uile dad ceart no nach eil: ceart gu leòr, mearachd, RUNNING, HANGS
Teachdaireachd - An teachdaireachd mu dheireadh soirbheachail no tuairisgeul mearachd.

Stèidhichte air inbhe nan clàran, faodaidh tu post-d a chuir. litir gu buill eile. Mura h-eil mearachdan ann, chan eil feum air an litir.

Mar sin, ma thachras mearachd, tha suidheachadh an tachartais air a chomharrachadh gu soilleir.

Uaireannan bidh e a 'tachairt nach obraich an inneal sgrùdaidh fhèin. Anns a 'chùis seo, tha e comasach sealladh (sealladh) a ghairm gu dìreach san stòr-dàta, air a bheil an aithisg air a thogail.

Clàr sgrùdaidh ETL

Gus sgrùdadh a dhèanamh air pròiseasan ETL, tha aon chlàr agus aon sealladh gu leòr.

Gus seo a dhèanamh, faodaidh tu tilleadh gu an stòradh beag agad agus cruthaich prototype ann an stòr-dàta sqlite.

Clàr DDL saor an asgaidh

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);

Seall/aithris 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 A’ sgrùdadh a bheil e comasach àireamh seisean ùr fhaighinn

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

Feartan clàr:

  • feumaidh toiseach is deireadh a' mhodh-obrachaidh dàta a bhith air a leantainn leis na ceumannan ETL_START agus ETL_END
  • ma bhios mearachd ann, bu chòir an ceum ETL_ERROR leis an tuairisgeul aige a chruthachadh
  • bu chòir an àireamh de dhàta pròiseasaichte a bhith air a chomharrachadh, mar eisimpleir, le rionnagan
  • faodar an aon dòigh-obrach a thòiseachadh aig an aon àm leis an force_restart = y paramadair, às aonais tha àireamh an t-seisein air a thoirt a-mach dìreach chun mhodh crìochnaichte
  • sa mhodh àbhaisteach, chan urrainn dhut an aon mhodh giollachd dàta a ruith aig an aon àm

Tha na gnìomhan riatanach airson a bhith ag obair le clàr mar a leanas:

  • a’ faighinn àireamh seisean a’ mhodh-obrach ruith ETL
  • cuir a-steach log a-steach don bhòrd
  • faighinn an clàr soirbheachail mu dheireadh de mhodh-obrach ETL

Ann an stòran-dàta leithid Oracle no Postgres, faodar na h-obraichean sin a chuir an gnìomh mar ghnìomhan togte. Feumaidh sqlite uidheamachd bhon taobh a-muigh, agus sa chùis seo e prototype ann am PHP.

co-dhùnadh

Mar sin, tha àite mega-chudromach aig teachdaireachdan mearachd ann an innealan giullachd dàta. Ach tha e duilich an gairm as fheàrr airson adhbhar na trioblaid a lorg gu sgiobalta. Nuair a thig an àireamh de mhodhan-obrach faisg air ceud, bidh sgrùdadh pròiseas a’ tionndadh gu bhith na phròiseact iom-fhillte.

Tha an artaigil a 'toirt seachad eisimpleir de fhuasgladh comasach air an duilgheadas ann an cruth prototype. Tha am prototype tasgaidh beag gu lèir ri fhaighinn ann an gitlab SQLite PHP ETL Utilities.

Source: www.habr.com

Cuir beachd ann