{"id":37701,"date":"2019-10-31T22:19:10","date_gmt":"2019-10-31T19:19:10","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh\/"},"modified":"2019-10-31T22:19:10","modified_gmt":"2019-10-31T19:19:10","slug":"monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","title":{"rendered":"Monitorizarea proceselor ETL \u00eentr-un mic depozit de date","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Multe persoane folosesc instrumente specializate pentru a crea proceduri de extragere, transformare \u0219i \u00eenc\u0103rcare a datelor \u00een baze de date rela\u021bionale. Procesul de func\u021bionare al instrumentelor este \u00eenregistrat, iar erorile sunt consemnate.<\/p>\n<p>\u00cen cazul unei erori, jurnalul con\u021bine informa\u021bii despre faptul c\u0103 instrumentului nu i-a reu\u0219it s\u0103 finalizeze sarcina \u0219i ce module (de obicei, java) s-au oprit. \u00cen ultimele linii se poate g\u0103si eroarea bazei de date, de exemplu, o \u00eenc\u0103lcare a cheii unice a tabelului.<\/p>\n<p>Pentru a r\u0103spunde la \u00eentrebarea despre rolul informa\u021biilor privind erorile ETL, am clasificat toate problemele ap\u0103rute \u00een ultimii doi ani \u00eentr-un depozit semnificativ. <\/p>\n<p><img decoding=\"async\" alt=\"Monitorizarea proceselor ETL \u00eentr-un mic depozit de date\" src=\"\/wp-content\/uploads\/2019\/09\/cfe750a4a4ec952651779ec563a40e05.jpg\" style=\"display:block;margin: 0 auto;\" \/><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Erorile bazei de date includ lucruri precum lipsa de spa\u021biu, \u00eentreruperea conexiunii, sesiuni blocate \u0219i altele.<\/p>\n<p>Erorile logice includ lucruri precum \u00eenc\u0103lcarea cheilor tabelului, obiecte invalide, lipsa accesului la obiecte \u0219i altele.<br \/>\nPlanificatorul poate fi pornit la timpul gre\u0219it, se poate bloca \u0219i altele.<\/p>\n<p>Erorile simple nu necesit\u0103 mult timp pentru a fi corectate. Majoritatea dintre ele sunt gestionate de un ETL bun \u00een mod automat.<\/p>\n<p>Erorile complexe necesit\u0103 deschiderea \u0219i verificarea procedurilor de lucru cu datele, investigarea surselor de date. Acestea duc adesea la necesitatea test\u0103rii modific\u0103rilor \u0219i desf\u0103\u0219ur\u0103rii.<\/p>\n<p>A\u0219adar, jum\u0103tate din toate problemele sunt legate de baza de date. 48% din toate erorile sunt erori simple.<br \/>\nO treime dintre toate problemele sunt legate de schimbarea logicii sau a modelului depozitului, mai mult de jum\u0103tate dintre aceste erori fiind complexe.<\/p>\n<p>\u0218i mai pu\u021bin de un sfert din toate problemele sunt legate de planificatorul de sarcini, din care 18% sunt erori simple.<\/p>\n<p>\u00cen general, 22% din toate erorile ap\u0103rute sunt complexe, corectarea lor necesit\u0103 cea mai mare aten\u021bie \u0219i timp. Acestea apar aproximativ o dat\u0103 pe s\u0103pt\u0103m\u00e2n\u0103, \u00een timp ce erorile simple se \u00eent\u00e2mpl\u0103 aproape \u00een fiecare zi.<\/p>\n<p>Evident, monitorizarea proceselor ETL va fi eficient\u0103 atunci c\u00e2nd \u00een jurnal este indicat c\u00e2t mai precis locul erorii \u0219i este necesar un timp minim pentru a localiza sursa problemei.<\/p>\n<h4>Monitorizare eficient\u0103<\/h4>\n<p>\nCe mi-ar pl\u0103cea s\u0103 v\u0103d \u00een procesul de monitorizare ETL?<\/p>\n<p><img decoding=\"async\" alt=\"Monitorizarea proceselor ETL \u00eentr-un mic depozit de date\" src=\"\/wp-content\/uploads\/2019\/09\/03e6ebc3aef69137880a278f9891370a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStart at \u2014 c\u00e2nd a \u00eenceput lucrul,<br \/>\nSource \u2014 sursa datelor,<br \/>\nLayer \u2014 ce nivel al depozitului este \u00eenc\u0103rcat,<br \/>\nETL Job Name \u2014 procedura de \u00eenc\u0103rcare care const\u0103 din numero\u0219i pa\u0219i mici,<br \/>\nStep Number \u2014 num\u0103rul pasului executat,<br \/>\nR\u00e2nduri afectate \u2014 c\u00e2te date au fost deja procesate,<br \/>\nDurata sec \u2014 c\u00e2t timp dureaz\u0103 execu\u021bia,<br \/>\nStatus \u2014 totul este bine sau nu: OK, ERROR, RUNNING, HANGS<br \/>\nMesaj \u2014 ultimul mesaj reu\u0219it sau descrierea erorii.<\/p>\n<p>Pe baza statusului \u00eenregistr\u0103rilor, se poate trimite un email altor participan\u021bi. Dac\u0103 nu sunt erori, atunci nici emailul nu este necesar.<\/p>\n<p>Astfel, \u00een caz de eroare, este clar indicat locul incidentului.<\/p>\n<p>Uneori se \u00eent\u00e2mpl\u0103 ca instrumentul de monitorizare s\u0103 nu func\u021bioneze. \u00cen acest caz, exist\u0103 posibilitatea de a apela direct \u00een baza de date o vedere (view) pe baza c\u0103reia este construit raportul.<\/p>\n<h4>Tabelul de monitorizare ETL<\/h4>\n<p>\nPentru a implementa monitorizarea proceselor ETL este suficient un singur tabel \u0219i o singur\u0103 vedere.<\/p>\n<p>Pentru aceasta, se poate \u00eentoarce la <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462337\/\">mica dvs. p\u0103str\u0103toare<\/a><\/noindex> \u0219i crea un prototip \u00een baza de date sqlite.<\/p>\n<p><b class=\"spoiler_title\">DDL tabelului<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE UTL_JOB_STATUS (\n\n\/* Tabel pentru logarea execu\u021biei muncii. Este important ca munca s\u0103 aib\u0103 pa\u0219ii ETL_START \u0219i ETL_END sau ETL_ERROR *\/\n  UTL_JOB_STATUS_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n  SID               INTEGER NOT NULL DEFAULT -1, \/* Identificator de sesiune. Unic pentru fiecare execu\u021bie a muncii *\/\n  LOG_DT            INTEGER NOT NULL DEFAULT 0,  \/* Dat\u0103 \u0219i or\u0103 *\/\n  LOG_D             INTEGER NOT NULL DEFAULT 0,  \/* Dat\u0103 *\/\n  JOB_NAME          TEXT NOT NULL DEFAULT 'N\/A', \/* Numele muncii, de exemplu, JOB_STG2DM_GEO *\/\n  STEP_NAME         TEXT NOT NULL DEFAULT 'N\/A', \/* ETL_START, ..., ETL_END\/ETL_ERROR *\/\n  STEP_DESCR        TEXT,                        \/* Descrierea sarcinii sau mesajului de eroare *\/\n  UNIQUE (SID, JOB_NAME, STEP_NAME)\n);\nINSERT INTO UTL_JOB_STATUS (UTL_JOB_STATUS_ID) VALUES (-1);<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">DDL vederii\/raportului<\/b><\/p>\n<pre><code class=\"sql\">CREA\u021aI VIZIUNE DAC\u0102 NU EXIST\u0102 UTL_JOB_STATUS_V\nCA \n\/* Con\u021binut: Jurnalul de execu\u021bie a pachetelor pentru ultimele 3 luni. *\/\nCU SRC CA (\n  SELECT LOG_D,\n    LOG_DT,\n    UTL_JOB_STATUS_ID,\n    SID,\n\tCASE C\u00c2ND INSTR(JOB_NAME, 'FTP') A\u0218A 'TRANSFER' \/* transfer de fi\u0219iere *\/\n\t     C\u00c2ND INSTR(JOB_NAME, 'STG') A\u0218A 'STADIA' \/* stadiu *\/\n\t     C\u00c2ND INSTR(JOB_NAME, 'CLS') A\u0218A 'CUR\u0102\u021aARE' \/* cur\u0103\u021bare *\/\n\t     C\u00c2ND INSTR(JOB_NAME, 'DIM') A\u0218A 'DIMENSIUNE' \/* dimensiune *\/\n\t     C\u00c2ND INSTR(JOB_NAME, 'FCT') A\u0218A 'FAPT' \/* fapt *\/\n\t\t C\u00c2ND INSTR(JOB_NAME, 'ETL') A\u0218A 'MART DE DATE' \/* mart de date *\/\n\t     C\u00c2ND INSTR(JOB_NAME, 'RPT') A\u0218A 'REPORT' \/* raport *\/\n\t     ALTCEVA 'N\/A' FINE AS LAYER,\n\tCASE C\u00c2ND INSTR(JOB_NAME, 'ACCESS') A\u0218A 'JURNAL DE ACCES' \/* surs\u0103 *\/\n\t     C\u00c2ND INSTR(JOB_NAME, 'MASTER') A\u0218A 'DATE PRINCIPALE' \/* surs\u0103 *\/\n\t     C\u00c2ND INSTR(JOB_NAME, 'AD-HOC') A\u0218A 'AD-HOC' \/* surs\u0103 *\/\n\t     ALTCEVA 'N\/A' FINE AS SOURCE,\n    JOB_NAME,\n    STEP_NAME,\n    CASE C\u00c2ND STEP_NAME='ETL_START' A\u0218A 1 ALTCEVA 0 FINE AS START_FLAG,\n    CASE C\u00c2ND STEP_NAME='ETL_END' A\u0218A 1 ALTCEVA 0 FINE AS END_FLAG,\n    CASE C\u00c2ND STEP_NAME='ETL_ERROR' A\u0218A 1 ALTCEVA 0 FINE AS ERROR_FLAG,\n    STEP_NAME || ' : ' || STEP_DESCR AS STEP_LOG,\n\tSUBSTR( SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), 1, INSTR(SUBSTR(STEP_DESCR, INSTR(STEP_DESCR, '***')+4), '***')-2 ) AS AFFECTED_ROWS\n  FROM UTL_JOB_STATUS\n  WHERE datetime(LOG_D, 'unixepoch') &gt;= date('now', 'start of month', '-3 month')\n)\nSELECT JB.SID,\n  JB.MIN_LOG_DT AS START_DT,\n  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS LOG_DT,\n  JB.SOURCE,\n  JB.LAYER,\n  JB.JOB_NAME,\n  CASE\n  C\u00c2ND JB.ERROR_FLAG = 1 A\u0218A 'EROARE'\n  C\u00c2ND JB.ERROR_FLAG = 0 \u0218I JB.END_FLAG = 0 \u0218I strftime('%s','now') - JB.MIN_LOG_DT &gt; 0.5*60*60 A\u0218A '\u00ceN A\u0218TEPTARE' \/* o jum\u0103tate de or\u0103 *\/\n  C\u00c2ND JB.ERROR_FLAG = 0 \u0218I JB.END_FLAG = 0 A\u0218A 'SE DESF\u0102\u0218OAR\u0102'\n  ALTCEVA 'BINE'\n  END AS STATUS,\n  ERR.STEP_LOG     AS STEP_LOG,\n  JB.CNT           AS STEP_CNT,\n  JB.AFFECTED_ROWS AS AFFECTED_ROWS,\n  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS JOB_START_DT,\n  strftime('%d.%m.%Y %H:%M', datetime(JB.MAX_LOG_DT, 'unixepoch')) AS JOB_END_DT,\n  JB.MAX_LOG_DT - JB.MIN_LOG_DT AS JOB_DURATION_SEC\nFROM\n  ( SELECT SID, SOURCE, LAYER, JOB_NAME,\n           MAX(UTL_JOB_STATUS_ID) AS UTL_JOB_STATUS_ID,\n           MAX(START_FLAG)       AS START_FLAG,\n           MAX(END_FLAG)         AS END_FLAG,\n           MAX(ERROR_FLAG)       AS ERROR_FLAG,\n           MIN(LOG_DT)           AS MIN_LOG_DT,\n           MAX(LOG_DT)           AS MAX_LOG_DT,\n           SUM(1)                AS CNT,\n           SUM(IFNULL(AFFECTED_ROWS, 0)) AS AFFECTED_ROWS\n    FROM SRC\n    GROUP BY SID, SOURCE, LAYER, JOB_NAME\n  ) JB,\n  ( SELECT UTL_JOB_STATUS_ID, SID, JOB_NAME, STEP_LOG\n    FROM SRC\n    WHERE 1 = 1\n  ) ERR\nWHERE 1 = 1\n  \u0218I JB.SID = ERR.SID\n  \u0218I JB.JOB_NAME = ERR.JOB_NAME\n  \u0218I JB.UTL_JOB_STATUS_ID = ERR.UTL_JOB_STATUS_ID\nORDER BY JB.MIN_LOG_DT DESC, JB.SID DESC, JB.SOURCE;<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Verificare SQL pentru posibilitatea de a ob\u021bine un nou num\u0103r de sesiune<\/b><\/p>\n<pre><code class=\"sql\">SELECT SUM (\n  CASE C\u00c2ND start_job.JOB_NAME NU ESTE NULL \u0218I end_job.JOB_NAME ESTE NULL \/* job existent s-a terminat *\/\n\t    \u0218I NU ( 'y' = 'n' ) \/* restart for\u021bat PARAMETRU *\/\n       A\u0218A 1 ALTCEVA 0\n  END ) AS IS_RUNNING\n  FROM\n    ( SELECT 1 AS dummy FROM UTL_JOB_STATUS WHERE sid = -1) d_job\n  LEFT OUTER JOIN\n    ( SELECT JOB_NAME, SID, 1 AS dummy\n      FROM UTL_JOB_STATUS\n      WHERE JOB_NAME = 'RPT_ACCESS_LOG' \/* numele jobului PARAMETRU *\/\n\t    \u0218I STEP_NAME = 'ETL_START'\n      GROUP BY JOB_NAME, SID\n    ) start_job \/* \u00eencepe *\/\n  PE d_job.dummy = start_job.dummy\n  LEFT OUTER JOIN\n    ( SELECT JOB_NAME, SID\n      FROM UTL_JOB_STATUS\n      WHERE JOB_NAME = 'RPT_ACCESS_LOG'  \/* numele jobului PARAMETRU *\/\n\t    \u0218I STEP_NAME in ('ETL_END', 'ETL_ERROR') \/* statut de oprire *\/\n      GROUP BY JOB_NAME, SID\n    ) end_job \/* se termin\u0103 *\/\n  PE start_job.JOB_NAME = end_job.JOB_NAME\n     \u0218I start_job.SID = end_job.SID<\/code><\/pre>\n<p>\nCaracteristici ale tabelului:<\/p>\n<ul>\n<li>\u00cenceperea \u0219i finalizarea procedurii de prelucrare a datelor trebuie s\u0103 fie \u00eenso\u021bite de pa\u0219ii ETL_START \u0219i ETL_END<\/li>\n<li>\u00cen caz de eroare, trebuie s\u0103 fie creat un pas ETL_ERROR cu descrierea acesteia<\/li>\n<li>Num\u0103rul de date procesate trebuie eviden\u021biat, de exemplu, cu ajutorul unor stele<\/li>\n<li>\u00cen acela\u0219i timp, aceea\u0219i procedur\u0103 poate fi lansat\u0103 cu parametrul force_restart=y; f\u0103r\u0103 acesta, num\u0103rul sesiunii este atribuit doar procedurii finalizate <\/li>\n<li>\u00cen modul normal, nu se poate lansa simultan aceea\u0219i procedur\u0103 de prelucrare a datelor<\/li>\n<\/ul>\n<p>\nOpera\u021biile necesare pentru lucrul cu tabelul sunt urm\u0103toarele:<\/p>\n<ul>\n<li>ob\u021binerea num\u0103rului sesiunii pentru procedura ETL lansat\u0103<\/li>\n<li>inserarea unui \u00eenregistr\u0103ri \u00een jurnal \u00een tabel<\/li>\n<li>ob\u021binerea celei mai recente \u00eenregistr\u0103ri de succes pentru procedura ETL<\/li>\n<\/ul>\n<p>\n\u00cen baze de date precum Oracle sau Postgres, aceste opera\u021bii pot fi implementate prin func\u021bii \u00eencorporate. Pentru sqlite este necesar un mecanism extern, iar \u00een acest caz, acesta <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\/blob\/master\/utl_func.php\">a fost prototipat \u00een PHP<\/a><\/noindex>.<\/p>\n<h4>Ie\u0219ire<\/h4>\n<p>\nAstfel, mesajele de eroare \u00een instrumentele de prelucrare a datelor joac\u0103 un rol mega-important. Totu\u0219i, pentru a g\u0103si rapid cauza problemei, este dificil s\u0103 le numim optime. C\u00e2nd num\u0103rul procedurilor se apropie de o sut\u0103, monitorizarea proceselor devine un proiect complex.<\/p>\n<p>Articolul ofer\u0103 un exemplu de solu\u021bie posibil\u0103 pentru problem\u0103 sub form\u0103 de prototip. \u00centregul prototip al unui mic depozit este disponibil pe gitlab <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\">Utilitare SQLite PHP ETL<\/a><\/noindex>.<br \/>\n<br \/>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/465637\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043e\u0448\u0438\u0431\u043a\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043b\u043e\u0433\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 (\u0447\u0430\u0441\u0442\u043e \u044d\u0442\u043e java) \u0433\u0434\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28295,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37701","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 ETL-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:19:10+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:19:10+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Monitorizarea proceselor ETL \u00eentr-un mic depozit de date | ProHoster","description":"Mul\u021bi folosesc instrumente specializate pentru a crea proceduri de extragere, transformare \u0219i \u00eenc\u0103rcare a datelor \u00een baze de date rela\u021bionale.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 ETL-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster","og:description":"\u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f, \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u043b\u044f\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:19:10+00:00","article:modified_time":"2019-10-31T19:19:10+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37701","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 18:57:59","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:22:28","updated":"2026-01-23 18:57:59","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=37701"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/37701\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/28295"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=37701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=37701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=37701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}