{"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\/nl\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","title":{"rendered":"Monitoring van ETL-processen in een kleine databasemagazijn","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Veel mensen gebruiken gespecialiseerde tools voor het cre\u00ebren van extractie-, transformatie- en laadprocedures in relationele databases. Het werkproces van de tools wordt gelogd, fouten worden vastgelegd.<\/p>\n<p>In geval van een fout bevat het log informatie over wat de tool niet kon uitvoeren en welke modules (vaak java) waar zijn stopgezet. In de laatste regels kan een databasefout worden gevonden, bijvoorbeeld een schending van de unieke sleutel van de tabel.<\/p>\n<p>Om de rol van foutinformatie in ETL te beantwoorden, heb ik alle problemen die de afgelopen twee jaar zijn voorgekomen in een grote opslag geclassificeerd. <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring van ETL-processen in een kleine databasemagazijn\" 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>Databasefouten omvatten zaken zoals gebrek aan ruimte, verbroken verbinding, vastgelopen sessies, enz.<\/p>\n<p>Logische fouten omvatten zaken zoals schending van tabelsleutels, ongeldige objecten, gebrek aan toegang tot objecten, enz.<br \/>\nDe planner kan op een ongelegen moment worden gestart, kan vastlopen, enz.<\/p>\n<p>Eenvoudige fouten vergen niet veel tijd om op te lossen. Met de meeste daarvan kan een goede ETL zelfstandig omgaan.<\/p>\n<p>Complexe fouten vereisen het openen en controleren van gegevensprocedures, het onderzoeken van gegevensbronnen. Dit leidt vaak tot de noodzaak om veranderingen te testen en uit te rollen.<\/p>\n<p>Dus de helft van alle problemen heeft te maken met de database. 48% van alle fouten zijn eenvoudige fouten.<br \/>\nEen derde van alle problemen heeft te maken met het wijzigen van de logica of het model van de opslag, meer dan de helft van deze fouten zijn complex.<\/p>\n<p>En minder dan een kwart van alle problemen heeft te maken met de taakplanner, waarvan 18% eenvoudige fouten zijn.<\/p>\n<p>Over het algemeen is 22% van alle opgetreden fouten complex, hun oplossing vergt de meeste aandacht en tijd. Deze komen ongeveer wekelijks voor. Terwijl eenvoudige fouten bijna elke dag voorkomen.<\/p>\n<p>Het is duidelijk dat monitoring van ETL-processen effectief zal zijn wanneer in het logboek zo nauwkeurig mogelijk het foutlocatie is aangegeven en er minimale tijd nodig is om de bron van het probleem te vinden.<\/p>\n<h4>Effectieve monitoring<\/h4>\n<p>\nWat wilde ik zien in het monitoringproces van ETL?<\/p>\n<p><img decoding=\"async\" alt=\"Monitoring van ETL-processen in een kleine databasemagazijn\" src=\"\/wp-content\/uploads\/2019\/09\/03e6ebc3aef69137880a278f9891370a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStart at \u2014 wanneer de werking begon,<br \/>\nSource \u2014 gegevensbron,<br \/>\nLayer \u2014 welk niveau van opslag wordt geladen,<br \/>\nETL Job Name \u2014 de laadprocedure die uit veel kleine stappen bestaat,<br \/>\nStep Number \u2014 nummer van de uitgevoerde stap,<br \/>\nBenadeelde Rij \u2014 hoeveel gegevens zijn al verwerkt,<br \/>\nDuur sec \u2014 hoe lang het duurt om uit te voeren,<br \/>\nStatus \u2014 is alles goed of niet: OK, ERROR, RUNNING, HANGS<br \/>\nBericht \u2014 het laatste succesvolle bericht of een foutbeschrijving.<\/p>\n<p>Op basis van de status van de records kan een e-mail naar andere deelnemers worden verzonden. Als er geen fouten zijn, is de e-mail ook niet verplicht.<\/p>\n<p>Dus in het geval van een fout is de locatie van het voorval duidelijk aangegeven.<\/p>\n<p>Soms komt het voor dat de monitoringtool zelf niet werkt. In dat geval is het mogelijk om direct in de database de weergave (view) aan te roepen, waarop het rapport is gebaseerd.<\/p>\n<h4>Monitoring tabel ETL<\/h4>\n<p>\nOm ETL-processen te monitoren, is slechts \u00e9\u00e9n tabel en \u00e9\u00e9n weergave nodig.<\/p>\n<p>Daarvoor kun je teruggaan naar <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462337\/\">jouw kleine opslagplaats<\/a><\/noindex> en een prototype in de sqlite-database maken.<\/p>\n<p><b class=\"spoiler_title\">DDL tabel<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE UTL_JOB_STATUS (\n\n\/* Tabel voor logging van jobuitvoeringslog. Belangrijk dat de job de stappen ETL_START en ETL_END of ETL_ERROR heeft *\/\n  UTL_JOB_STATUS_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n  SID               INTEGER NOT NULL DEFAULT -1, \/* Sessienaam. Uniek voor elke uitvoering van de job *\/\n  LOG_DT            INTEGER NOT NULL DEFAULT 0,  \/* Datum tijd *\/\n  LOG_D             INTEGER NOT NULL DEFAULT 0,  \/* Datum *\/\n  JOB_NAME          TEXT NOT NULL DEFAULT 'N\/A', \/* Jobnaam zoals JOB_STG2DM_GEO *\/\n  STEP_NAME         TEXT NOT NULL DEFAULT 'N\/A', \/* ETL_START, ... , ETL_END\/ETL_ERROR *\/\n  STEP_DESCR        TEXT,                        \/* Beschrijving van de taak of foutmelding *\/\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 weergave\/rapport<\/b><\/p>\n<pre><code class=\"sql\">MAAK VIEW ALS DEZE NOG NIET BESTAAT UTL_JOB_STATUS_V\nALS \n\/* Inhoud: Uitvoeringslogboek van pakketten voor de laatste 3 maanden. *\/\nMET SRC AS (\n  SELECT LOG_D,\n    LOG_DT,\n    UTL_JOB_STATUS_ID,\n    SID,\n\tCASE WHEN INSTR(JOB_NAME, 'FTP') THEN 'OVERDRACHT' \/* bestandsoverdracht *\/\n\t     WHEN INSTR(JOB_NAME, 'STG') THEN 'STADIA' \/* stadium *\/\n\t     WHEN INSTR(JOB_NAME, 'CLS') THEN 'SCHOONMAKEN' \/* schoonmaak *\/\n\t     WHEN INSTR(JOB_NAME, 'DIM') THEN 'DIMENSIE' \/* dimensie *\/\n\t     WHEN INSTR(JOB_NAME, 'FCT') THEN 'FEIT' \/* feit *\/\n\t\t WHEN INSTR(JOB_NAME, 'ETL') THEN 'STAGE-MART' \/* gegevensmart *\/\n\t     WHEN INSTR(JOB_NAME, 'RPT') THEN 'VERSLAG' \/* verslag *\/\n\t     ELSE 'N\/A' END AS LAYER,\n\tCASE WHEN INSTR(JOB_NAME, 'ACCESS') THEN 'TOEGANGSLOG' \/* bron *\/\n\t     WHEN INSTR(JOB_NAME, 'MASTER') THEN 'MASTERGEGEVENS' \/* bron *\/\n\t     WHEN INSTR(JOB_NAME, 'AD-HOC') THEN 'AD-HOC' \/* bron *\/\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  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  WHEN JB.ERROR_FLAG = 1 THEN 'FOUT'\n  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 AND strftime('%s','now') - JB.MIN_LOG_DT &gt; 0.5*60*60 THEN 'HANGT' \/* een half uur *\/\n  WHEN JB.ERROR_FLAG = 0 AND JB.END_FLAG = 0 THEN 'LOOPT'\n  ELSE 'OK'\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  AND JB.SID = ERR.SID\n  AND JB.JOB_NAME = ERR.JOB_NAME\n  AND 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\">SQL Controle op de mogelijkheid om een nieuw sessienummer te verkrijgen<\/b><\/p>\n<pre><code class=\"sql\">SELECT SUM (\n  CASE WHEN start_job.JOB_NAME IS NOT NULL AND end_job.JOB_NAME IS NULL \/* bestaand job is be\u00ebindigd *\/\n\t    AND NOT ( 'y' = 'n' ) \/* geforceerde herstart PARAMETER *\/\n       THEN 1 ELSE 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' \/* jobnaam PARAMETER *\/\n\t    AND STEP_NAME = 'ETL_START'\n      GROUP BY JOB_NAME, SID\n    ) start_job \/* begint *\/\n  ON 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'  \/* jobnaam PARAMETER *\/\n\t    AND STEP_NAME in ('ETL_END', 'ETL_ERROR') \/* stopstatus *\/\n      GROUP BY JOB_NAME, SID\n    ) end_job \/* eindigt *\/\n  ON start_job.JOB_NAME = end_job.JOB_NAME\n     AND start_job.SID = end_job.SID<\/code><\/pre>\n<p>\nKenmerken van de tabel:<\/p>\n<ul>\n<li>Het begin en het einde van de gegevensverwerkingsprocedure moeten worden begeleid door de stappen ETL_START en ETL_END<\/li>\n<li>In geval van een fout moet de stap ETL_ERROR met de beschrijving ervan worden aangemaakt<\/li>\n<li>Het aantal verwerkte gegevens moet worden gemarkeerd, bijvoorbeeld met sterretjes<\/li>\n<li>Tegelijkertijd kan dezelfde procedure worden gestart met de parameter force_restart=y; zonder deze wordt het sessienummer alleen gegeven voor de voltooide procedure <\/li>\n<li>In de normale modus kan dezelfde gegevensverwerkingsprocedure niet parallel worden uitgevoerd<\/li>\n<\/ul>\n<p>\nDe noodzakelijke acties die met de tabel moeten worden uitgevoerd, zijn de volgende:<\/p>\n<ul>\n<li>verhoog het sessienummer van de gestartte ETL-procedure<\/li>\n<li>voeg een logrecord toe aan de tabel<\/li>\n<li>haal de laatste succesvolle record van de ETL-procedure op<\/li>\n<\/ul>\n<p>\nIn databases zoals Oracle of Postgres kunnen deze acties worden ge\u00efmplementeerd met ingebouwde functies. Voor sqlite is een externe mechanisme vereist en in dit geval is het <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\/blob\/master\/utl_func.php\">geprototyped in PHP<\/a><\/noindex>.<\/p>\n<h4>Uitslag<\/h4>\n<p>\nOp die manier spelen foutmeldingen in gegevensverwerkingsinstrumenten een mega-belangrijke rol. Maar ze zijn niet optimaal voor het snel vinden van de oorzaak van het probleem. Wanneer het aantal procedures bijna honderd nadert, wordt het monitoren van processen een complex project.<\/p>\n<p>In het artikel wordt een voorbeeld gegeven van een mogelijke oplossing voor het probleem in de vorm van een prototype. Het hele prototype van een kleine opslag is beschikbaar op gitlab <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\">SQLite PHP ETL Utilities<\/a><\/noindex>.<br \/>\n<br \/>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47Monitoring van ETL-processen in een kleine gegevensopslag | ProHoster","description":"Veel mensen gebruiken gespecialiseerde hulpmiddelen voor het maken van extractie-, transformatie- en laadprocedures voor relationele databases.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/37701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=37701"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/37701\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/28295"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=37701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=37701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=37701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}