{"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\/it\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","title":{"rendered":"Monitoraggio dei processi ETL in un piccolo data store","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Molti utilizzano strumenti specializzati per creare procedure di estrazione, trasformazione e caricamento dei dati in database relazionali. Il processo di utilizzo degli strumenti viene registrato e gli errori vengono documentati.<\/p>\n<p>In caso di errore, il log contiene informazioni su cosa ha impedito all'utensile di portare a termine il compito e quali moduli (spesso sono java) si sono bloccati. Nelle ultime righe si pu\u00f2 trovare l'errore del database, ad esempio, una violazione della chiave unica della tabella.<\/p>\n<p>Per rispondere alla domanda riguardo al ruolo delle informazioni sugli errori ETL, ho classificato tutti i problemi verificatisi negli ultimi due anni in un considerevole data warehouse. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio dei processi ETL in un piccolo data store\" 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>Gli errori di database includono situazioni come mancanza di spazio, connessione interrotta, sessione bloccata, e cos\u00ec via.<\/p>\n<p>Gli errori logici comprendono questioni come violazione delle chiavi di tabella, oggetti non validi, mancanza di accesso agli oggetti, ecc.<br \/>\nIl pianificatore pu\u00f2 essere avviato in ritardo, pu\u00f2 bloccarsi, e cos\u00ec via.<\/p>\n<p>Gli errori semplici non richiedono molto tempo per essere corretti. La maggior parte di essi un buon ETL riesce a gestirli autonomamente.<\/p>\n<p>Gli errori complessi richiedono l'apertura e il controllo delle procedure di gestione dei dati, l'esplorazione delle fonti di dati. Spesso portano alla necessit\u00e0 di testare le modifiche e fare il deployment.<\/p>\n<p>Quindi, met\u00e0 di tutti i problemi \u00e8 correlata al database. Il 48% di tutti gli errori sono semplici errori.<br \/>\nUn terzo di tutti i problemi \u00e8 legato al cambiamento della logica o del modello del data warehouse, la maggior parte di questi errori \u00e8 complessa.<\/p>\n<p>E meno di un quarto di tutti i problemi \u00e8 associato al pianificatore di attivit\u00e0, il 18% di questi sono errori semplici.<\/p>\n<p>In generale, il 22% di tutti gli errori registrati sono complessi, la loro correzione richiede il maggior tempo e attenzione. Si verificano circa una volta a settimana, mentre gli errori semplici accadono quasi ogni giorno.<\/p>\n<p>\u00c8 evidente che il monitoraggio dei processi ETL sar\u00e0 efficace solo quando il log indica con precisione il luogo dell'errore e richiede il minimo tempo per reperire la fonte del problema.<\/p>\n<h4>Monitoraggio efficace<\/h4>\n<p>\nCosa mi piacerebbe vedere nel processo di monitoraggio ETL?<\/p>\n<p><img decoding=\"async\" alt=\"Monitoraggio dei processi ETL in un piccolo data store\" src=\"\/wp-content\/uploads\/2019\/09\/03e6ebc3aef69137880a278f9891370a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStart at \u2014 quando ha iniziato a lavorare,<br \/>\nSource \u2014 fonte dei dati,<br \/>\nLayer \u2014 quale livello del data warehouse vieneCaricato,<br \/>\nETL Job Name \u2014 procedura di caricamento che consiste in molti piccoli passi,<br \/>\nStep Number \u2014 numero del passo eseguito,<br \/>\nAffected Rows \u2014 quanti dati sono gi\u00e0 stati elaborati,<br \/>\nDuration sec \u2014 quanto tempo impiega,<br \/>\nStatus \u2014 tutto bene o no: OK, ERROR, RUNNING, HANGS<br \/>\nMessage \u2014 ultimo messaggio riuscito o descrizione dell'errore.<\/p>\n<p>Sulla base dello stato dei record, \u00e8 possibile inviare un'email ad altri partecipanti. Se non ci sono errori, l'email non \u00e8 necessaria.<\/p>\n<p>In questo modo, in caso di errore, il luogo dell'incidente \u00e8 chiaramente indicato.<\/p>\n<p>A volte accade che lo stesso strumento di monitoraggio non funzioni. In tal caso, \u00e8 possibile richiamare direttamente il view nel database sul quale si basa il report.<\/p>\n<h4>Tabella di monitoraggio ETL<\/h4>\n<p>\nPer implementare il monitoraggio dei processi ETL \u00e8 sufficiente una tabella e una vista.<\/p>\n<p>Per fare ci\u00f2, possiamo tornare nel <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462337\/\">il nostro piccolo data warehouse<\/a><\/noindex> e creare un prototipo nel database sqlite.<\/p>\n<p><b class=\"spoiler_title\">DDL tabella<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE UTL_JOB_STATUS (\n\/* Tabella per la registrazione del log di esecuzione del lavoro. \u00c8 importante che il lavoro abbia i passi ETL_START e ETL_END o ETL_ERROR *\/\n  UTL_JOB_STATUS_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n  SID               INTEGER NOT NULL DEFAULT -1, \/* Identificatore di sessione. Unico per ogni esecuzione del lavoro *\/\n  LOG_DT            INTEGER NOT NULL DEFAULT 0,  \/* Data e ora *\/\n  LOG_D             INTEGER NOT NULL DEFAULT 0,  \/* Data *\/\n  JOB_NAME          TEXT NOT NULL DEFAULT 'N\/A', \/* Nome del lavoro come JOB_STG2DM_GEO *\/\n  STEP_NAME         TEXT NOT NULL DEFAULT 'N\/A', \/* ETL_START, ... , ETL_END\/ETL_ERROR *\/\n  STEP_DESCR        TEXT,                        \/* Descrizione del compito o messaggio d'errore *\/\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 vista\/report<\/b><\/p>\n<pre><code class=\"sql\">CREA VISTA SE NON ESISTE UTL_JOB_STATUS_V\nAS \/* Contenuto: Log di Esecuzione del Pacchetto per gli ultimi 3 Mesi. *\/\nCON SRC AS (\n  SELEZIONA LOG_D,\n    LOG_DT,\n    UTL_JOB_STATUS_ID,\n    SID,\n\tCASE WHEN INSTR(JOB_NAME, 'FTP') THEN 'TRASFERIMENTO' \/* trasferimento file *\/\n\t     WHEN INSTR(JOB_NAME, 'STG') THEN 'STAGE' \/* fase *\/\n\t     WHEN INSTR(JOB_NAME, 'CLS') THEN 'PULIZIA' \/* pulizia *\/\n\t     WHEN INSTR(JOB_NAME, 'DIM') THEN 'DIMENSIONE' \/* dimensione *\/\n\t     WHEN INSTR(JOB_NAME, 'FCT') THEN 'FATTO' \/* fatto *\/\n\t\t WHEN INSTR(JOB_NAME, 'ETL') THEN 'STAGE-MART' \/* data mart *\/\n\t     WHEN INSTR(JOB_NAME, 'RPT') THEN 'REPORT' \/* report *\/\n\t     ELSE 'N\/A' END AS LAYER,\n\tCASE WHEN INSTR(JOB_NAME, 'ACCESS') THEN 'LOG ACCESSO' \/* sorgente *\/\n\t     WHEN INSTR(JOB_NAME, 'MASTER') THEN 'DATI MASTER' \/* sorgente *\/\n\t     WHEN INSTR(JOB_NAME, 'AD-HOC') THEN 'AD-HOC' \/* sorgente *\/\n\t     ELSE 'N\/A' END AS SOURCE,\n    JOB_NAME,\n    STEP_NAME,\n    CASE WHEN STEP_NAME='ETL_START' THEN 1 ELSE 0 END AS START_FLAG,\n    CASE WHEN STEP_NAME='ETL_END' THEN 1 ELSE 0 END AS END_FLAG,\n    CASE WHEN STEP_NAME='ETL_ERROR' THEN 1 ELSE 0 END 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  DA UTL_JOB_STATUS\n  DOVE datetime(LOG_D, 'unixepoch') &gt;= date('now', 'start of month', '-3 month')\n)\nSELEZIONA JB.SID,\n  JB.MIN_LOG_DT COME START_DT,\n  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) COME LOG_DT,\n  JB.SOURCE,\n  JB.LAYER,\n  JB.JOB_NAME,\n  CASE\n  WHEN JB.ERROR_FLAG = 1 ALLORA 'ERRORE'\n  WHEN JB.ERROR_FLAG = 0 E JB.END_FLAG = 0 E strftime('%s','now') - JB.MIN_LOG_DT &gt; 0.5*60*60 ALLORA 'IN ATTESA' \/* mezz'ora *\/\n  WHEN JB.ERROR_FLAG = 0 E JB.END_FLAG = 0 ALLORA 'IN ESECUZIONE'\n  ELSE 'OK'\n  FINE COME STATO,\n  ERR.STEP_LOG     COME STEP_LOG,\n  JB.CNT           COME STEP_CNT,\n  JB.AFFECTED_ROWS COME AFFECTED_ROWS,\n  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) COME JOB_START_DT,\n  strftime('%d.%m.%Y %H:%M', datetime(JB.MAX_LOG_DT, 'unixepoch')) COME JOB_END_DT,\n  JB.MAX_LOG_DT - JB.MIN_LOG_DT COME JOB_DURATION_SEC\nDA\n  ( SELECT SID, SOURCE, LAYER, JOB_NAME,\n           MAX(UTL_JOB_STATUS_ID) COME UTL_JOB_STATUS_ID,\n           MAX(START_FLAG)       COME START_FLAG,\n           MAX(END_FLAG)         COME END_FLAG,\n           MAX(ERROR_FLAG)       COME ERROR_FLAG,\n           MIN(LOG_DT)           COME MIN_LOG_DT,\n           MAX(LOG_DT)           COME MAX_LOG_DT,\n           SUM(1)                COME CNT,\n           SUM(IFNULL(AFFECTED_ROWS, 0)) COME AFFECTED_ROWS\n    DA SRC\n    GROUP BY SID, SOURCE, LAYER, JOB_NAME\n  ) JB,\n  ( SELECT UTL_JOB_STATUS_ID, SID, JOB_NAME, STEP_LOG\n    DA SRC\n    DOVE 1 = 1\n  ) ERR\nDOVE 1 = 1\n  E JB.SID = ERR.SID\n  E JB.JOB_NAME = ERR.JOB_NAME\n  E JB.UTL_JOB_STATUS_ID = ERR.UTL_JOB_STATUS_ID\nORDINA PER JB.MIN_LOG_DT DESC, JB.SID DESC, JB.SOURCE;<\/code><\/pre>\n<p>\n<b class=\"spoiler_title\">Verifica SQL della possibilit\u00e0 di ottenere un nuovo numero di sessione<\/b><\/p>\n<pre><code class=\"sql\">SELEZIONA SOMMA (\n  CASE WHEN start_job.JOB_NAME IS NOT NULL E end_job.JOB_NAME IS NULL \/* il lavoro esistente \u00e8 terminato *\/\n\t    E NON ( 'y' = 'n' ) \/* forza riavvio PARAMETRO *\/\n       ALLORA 1 ELSE 0\n  FINE ) COME IS_RUNNING\n  DA\n    ( SELEZIONA 1 COME dummy DA UTL_JOB_STATUS DOVE sid = -1) d_job\n  LEFT OUTER JOIN\n    ( SELEZIONA JOB_NAME, SID, 1 COME dummy\n      DA UTL_JOB_STATUS\n      DOVE JOB_NAME = 'RPT_ACCESS_LOG' \/* nome lavoro PARAMETRO *\/\n\t    E STEP_NAME = 'ETL_START'\n      GROUP BY JOB_NAME, SID\n    ) start_job \/* inizio *\/\n  ON d_job.dummy = start_job.dummy\n  LEFT OUTER JOIN\n    ( SELEZIONA JOB_NAME, SID\n      DA UTL_JOB_STATUS\n      DOVE JOB_NAME = 'RPT_ACCESS_LOG'  \/* nome lavoro PARAMETRO *\/\n\t    E STEP_NAME in ('ETL_END', 'ETL_ERROR') \/* stato di fermo *\/\n      GROUP BY JOB_NAME, SID\n    ) end_job \/* fine *\/\n  ON start_job.JOB_NAME = end_job.JOB_NAME\n     E start_job.SID = end_job.SID<\/code><\/pre>\n<p>\nCaratteristiche della tabella:<\/p>\n<ul>\n<li>l'inizio e la fine della procedura di elaborazione dei dati devono essere accompagnati dai passaggi ETL_START e ETL_END<\/li>\n<li>in caso di errore, deve essere creato un passaggio ETL_ERROR con la sua descrizione<\/li>\n<li>il numero di dati elaborati deve essere evidenziato, ad esempio, con asterischi<\/li>\n<li>nello stesso momento, la stessa procedura pu\u00f2 essere avviata con il parametro force_restart=y; senza di esso, il numero di sessione viene assegnato solo alla procedura completata <\/li>\n<li>in modalit\u00e0 normale non \u00e8 possibile avviare parallelamente la stessa procedura di elaborazione dei dati<\/li>\n<\/ul>\n<p>\nLe operazioni necessarie per lavorare con la tabella sono le seguenti:<\/p>\n<ul>\n<li>ottenere il numero di sessione della procedura ETL in esecuzione<\/li>\n<li>inserire una registrazione del log nella tabella<\/li>\n<li>ottenere l'ultima registrazione di successo della procedura ETL<\/li>\n<\/ul>\n<p>\nIn database come Oracle o Postgres, queste operazioni possono essere implementate utilizzando funzioni integrate. Per sqlite \u00e8 necessario un meccanismo esterno e in questo caso esso <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\/blob\/master\/utl_func.php\">\u00e8 prototipato in PHP<\/a><\/noindex>.<\/p>\n<h4>Risultato<\/h4>\n<p>\nPertanto, i messaggi di errore negli strumenti di elaborazione dei dati giocano un ruolo molto importante. Tuttavia, \u00e8 difficile chiamarli ottimali per una rapida ricerca della causa del problema. Quando il numero di procedure si avvicina a cento, il monitoraggio dei processi diventa un progetto complesso.<\/p>\n<p>L'articolo presenta un esempio possibile di soluzione al problema sotto forma di prototipo. L'intero prototipo di un piccolo repository \u00e8 disponibile su gitlab <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\">SQLite PHP ETL Utilities<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <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.0.1 - 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\/it\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Monitoraggio dei processi ETL in un piccolo warehouse dati | ProHoster","description":"Molti utilizzano strumenti specializzati per creare procedure di estrazione, trasformazione e caricamento dei dati nei database relazionali.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/37701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=37701"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/37701\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/28295"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=37701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=37701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=37701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}