{"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\/fr\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","title":{"rendered":"Surveillance des processus ETL dans un petit entrep\u00f4t de donn\u00e9es","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Beaucoup utilisent des outils sp\u00e9cialis\u00e9s pour cr\u00e9er des proc\u00e9dures d'extraction, de transformation et de chargement de donn\u00e9es dans des bases de donn\u00e9es relationnelles. Le processus de travail des outils est enregistr\u00e9, et les erreurs sont document\u00e9es.<\/p>\n<p>En cas d'erreur, le journal contient des informations sur les raisons pour lesquelles l'outil n'a pas r\u00e9ussi \u00e0 ex\u00e9cuter la t\u00e2che et quels modules (souvent en java) se sont arr\u00eat\u00e9s. Dans les derni\u00e8res lignes, on peut trouver l'erreur de la base de donn\u00e9es, par exemple, une violation de cl\u00e9 unique dans la table.<\/p>\n<p>Pour r\u00e9pondre \u00e0 la question du r\u00f4le des informations d'erreurs ETL, j'ai class\u00e9 tous les probl\u00e8mes survenus au cours des deux derni\u00e8res ann\u00e9es dans un grand entrep\u00f4t. <\/p>\n<p><img decoding=\"async\" alt=\"Surveillance des processus ETL dans un petit entrep\u00f4t de donn\u00e9es\" 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>Les erreurs de base de donn\u00e9es comprennent des probl\u00e8mes tels que le manque d'espace, la rupture de connexion, une session suspendue, etc.<\/p>\n<p>Les erreurs logiques comprennent des probl\u00e8mes tels que les violations de cl\u00e9s de table, des objets non valides, l'absence d'acc\u00e8s aux objets, etc.<br \/>\nLe planificateur peut ne pas \u00eatre lanc\u00e9 \u00e0 temps, peut se bloquer, etc.<\/p>\n<p>Les erreurs simples ne n\u00e9cessitent pas beaucoup de temps pour \u00eatre corrig\u00e9es. La plupart d'entre elles peuvent \u00eatre g\u00e9r\u00e9es automatiquement par un bon ETL.<\/p>\n<p>Les erreurs complexes n\u00e9cessitent d'ouvrir et de v\u00e9rifier les proc\u00e9dures de traitement des donn\u00e9es, d'explorer les sources de donn\u00e9es. Elles entra\u00eenent souvent des tests des modifications et des d\u00e9ploiements.<\/p>\n<p>Ainsi, la moiti\u00e9 de tous les probl\u00e8mes est li\u00e9e \u00e0 la base de donn\u00e9es. 48 % de toutes les erreurs sont des erreurs simples.<br \/>\nUn tiers de tous les probl\u00e8mes est li\u00e9 \u00e0 des modifications de la logique ou du mod\u00e8le de l'entrep\u00f4t, et plus de la moiti\u00e9 de ces erreurs sont complexes.<\/p>\n<p>Moins d'un quart de tous les probl\u00e8mes sont li\u00e9s au planificateur de t\u00e2ches, dont 18 % sont des erreurs simples.<\/p>\n<p>En g\u00e9n\u00e9ral, 22 % des erreurs survenues sont complexes, leur correction n\u00e9cessite le plus d'attention et de temps. Elles se produisent environ une fois par semaine. Pendant ce temps, les erreurs simples se produisent presque tous les jours.<\/p>\n<p>Il est \u00e9vident que le suivi des processus ETL sera efficace lorsque le journal indique de mani\u00e8re aussi pr\u00e9cise que possible l'emplacement de l'erreur et n\u00e9cessite un minimum de temps pour localiser la source du probl\u00e8me.<\/p>\n<h4>Suivi efficace<\/h4>\n<p>\nQu'aimerais-je voir dans le processus de suivi ETL ?<\/p>\n<p><img decoding=\"async\" alt=\"Surveillance des processus ETL dans un petit entrep\u00f4t de donn\u00e9es\" src=\"\/wp-content\/uploads\/2019\/09\/03e6ebc3aef69137880a278f9891370a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStart at \u2014 quand le travail a commenc\u00e9,<br \/>\nSource \u2014 source de donn\u00e9es,<br \/>\nLayer \u2014 quel niveau d'entrep\u00f4t est charg\u00e9,<br \/>\nETL Job Name \u2014 proc\u00e9dure de chargement, compos\u00e9e de nombreuses petites \u00e9tapes,<br \/>\nStep Number \u2014 num\u00e9ro de l'\u00e9tape actuellement ex\u00e9cut\u00e9e,<br \/>\nLignes affect\u00e9es \u2014 combien de donn\u00e9es ont d\u00e9j\u00e0 \u00e9t\u00e9 trait\u00e9es,<br \/>\nDur\u00e9e sec \u2014 combien de temps cela prend,<br \/>\nStatut \u2014 tout va bien ou non : OK, ERREUR, EN COURS, BLOQU\u00c9<br \/>\nMessage \u2014 dernier message r\u00e9ussi ou description de l'erreur.<\/p>\n<p>Sur la base du statut des enregistrements, il est possible d'envoyer un e-mail aux autres participants. S'il n'y a pas d'erreurs, l'e-mail n'est pas n\u00e9cessaire.<\/p>\n<p>Ainsi, en cas d'erreur, l'endroit exact o\u00f9 cela s'est produit est clairement indiqu\u00e9.<\/p>\n<p>Il arrive parfois que l'outil de surveillance lui-m\u00eame ne fonctionne pas. Dans ce cas, il est possible d'appeler directement dans la base de donn\u00e9es la vue sur laquelle le rapport est bas\u00e9.<\/p>\n<h4>Table de surveillance ETL<\/h4>\n<p>\nPour mettre en place la surveillance des processus ETL, une seule table et une seule vue sont suffisantes.<\/p>\n<p>Pour cela, on peut revenir dans <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/462337\/\">son petit entrep\u00f4t<\/a><\/noindex> et cr\u00e9er un prototype dans une base de donn\u00e9es SQLite.<\/p>\n<p><b class=\"spoiler_title\">DDL de la table<\/b><\/p>\n<pre><code class=\"sql\">CREATE TABLE UTL_JOB_STATUS (\n\n\/* Table pour l'enregistrement du journal d'ex\u00e9cution des t\u00e2ches. Important que la t\u00e2che ait les \u00e9tapes ETL_START et ETL_END ou ETL_ERROR *\/\n  UTL_JOB_STATUS_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,\n  SID               INTEGER NOT NULL DEFAULT -1, \/* Identificateur de session. Unique pour chaque Ex\u00e9cution de t\u00e2che *\/\n  LOG_DT            INTEGER NOT NULL DEFAULT 0,  \/* Date et heure *\/\n  LOG_D             INTEGER NOT NULL DEFAULT 0,  \/* Date *\/\n  JOB_NAME          TEXT NOT NULL DEFAULT 'N\/A', \/* Nom de la t\u00e2che comme JOB_STG2DM_GEO *\/\n  STEP_NAME         TEXT NOT NULL DEFAULT 'N\/A', \/* ETL_START, ..., ETL_END\/ETL_ERROR *\/\n  STEP_DESCR        TEXT,                        \/* Description de la t\u00e2che ou message d'erreur *\/\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 de la vue\/rapport<\/b><\/p>\n<pre><code class=\"sql\">CR\u00c9ER UNE VUE SI NON EXISTE UTL_JOB_STATUS_V\nEN TANT QUE \n\/* Contenu : Journal d'ex\u00e9cution du package pour les 3 derniers mois. *\/\nAVEC SRC COMME (\n  S\u00c9LECTIONNER LOG_D,\n    LOG_DT,\n    UTL_JOB_STATUS_ID,\n    SID,\n\tCASE WHEN INSTR(JOB_NAME, 'FTP') THEN 'TRANSFERT' \/* transfert de fichier *\/\n\t     WHEN INSTR(JOB_NAME, 'STG') THEN 'STAGE' \/* \u00e9tape *\/\n\t     WHEN INSTR(JOB_NAME, 'CLS') THEN 'NETTOYAGE' \/* nettoyage *\/\n\t     WHEN INSTR(JOB_NAME, 'DIM') THEN 'DIMENSION' \/* dimension *\/\n\t     WHEN INSTR(JOB_NAME, 'FCT') THEN 'FAIT' \/* fait *\/\n\t\t WHEN INSTR(JOB_NAME, 'ETL') THEN 'STAGE-MART' \/* mart de donn\u00e9es *\/\n\t     WHEN INSTR(JOB_NAME, 'RPT') THEN 'RAPPORT' \/* rapport *\/\n\t     ELSE 'N\/A' END AS COUCHE,\n\tCASE WHEN INSTR(JOB_NAME, 'ACCESS') THEN 'LOG D\u2019ACC\u00c8S' \/* source *\/\n\t     WHEN INSTR(JOB_NAME, 'MASTER') THEN 'DONN\u00c9ES MA\u00ceTRES' \/* source *\/\n\t     WHEN INSTR(JOB_NAME, 'AD-HOC') THEN 'AD-HOC' \/* source *\/\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  DE UTL_JOB_STATUS\n  O\u00d9 datetime(LOG_D, 'unixepoch') &gt;= date('now', 'start of month', '-3 month')\n)\nS\u00c9LECTIONNER JB.SID,\n  JB.MIN_LOG_DT COMME START_DT,\n  strftime('%d.%m.%Y %H:%M', datetime(JB.MIN_LOG_DT, 'unixepoch')) AS LOG_DT,\n  JB.SOURCE,\n  JB.COUCHE,\n  JB.JOB_NAME,\n  CASE\n  QUAND JB.ERROR_FLAG = 1 ALORS 'ERREUR'\n  QUAND JB.ERROR_FLAG = 0 ET JB.END_FLAG = 0 ET strftime('%s','now') - JB.MIN_LOG_DT &gt; 0.5*60*60 ALORS 'EN ATTENTE' \/* une demi-heure *\/\n  QUAND JB.ERROR_FLAG = 0 ET JB.END_FLAG = 0 ALORS 'EN COURS'\n  SINON 'OK'\n  FIN AS STATUT,\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\nDE\n  ( S\u00c9LECTIONNER SID, SOURCE, COUCHE, JOB_NAME,\n           MAX(UTL_JOB_STATUS_ID) COMME UTL_JOB_STATUS_ID,\n           MAX(START_FLAG)       COMME START_FLAG,\n           MAX(END_FLAG)         COMME END_FLAG,\n           MAX(ERROR_FLAG)       COMME ERROR_FLAG,\n           MIN(LOG_DT)           COMME MIN_LOG_DT,\n           MAX(LOG_DT)           COMME MAX_LOG_DT,\n           SOMME(1)                COMME CNT,\n           SOMME(IFNULL(AFFECTED_ROWS, 0)) COMME AFFECTED_ROWS\n    DE SRC\n    GROUPE PAR SID, SOURCE, COUCHE, JOB_NAME\n  ) JB,\n  ( S\u00c9LECTIONNER UTL_JOB_STATUS_ID, SID, JOB_NAME, STEP_LOG\n    DE SRC\n    O\u00d9 1 = 1\n  ) ERR\nO\u00d9 1 = 1\n  ET JB.SID = ERR.SID\n  ET JB.JOB_NAME = ERR.JOB_NAME\n  ET 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\">V\u00e9rification SQL de la possibilit\u00e9 d'obtenir un nouveau num\u00e9ro de session<\/b><\/p>\n<pre><code class=\"sql\">S\u00c9LECTIONNER SOMME (\n  CASE QUAND start_job.JOB_NAME EST NON NULL ET end_job.JOB_NAME EST NULL \/* emploi existant termin\u00e9 *\/\n\t    ET NON ( 'y' = 'n' ) \/* red\u00e9marrer de force PARAM\u00c8TRE *\/\n       ALORS 1 SINON 0\n  FIN ) COMME IS_RUNNING\n  DE\n    ( S\u00c9LECTIONNER 1 COMME dummy DE UTL_JOB_STATUS O\u00d9 sid = -1) d_job\n  JOINDRE EXT\u00c9RIEUR GAUCHE\n    ( S\u00c9LECTIONNER JOB_NAME, SID, 1 COMME dummy\n      DE UTL_JOB_STATUS\n      O\u00d9 JOB_NAME = 'RPT_ACCESS_LOG' \/* nom de job PARAM\u00c8TRE *\/\n\t    ET STEP_NAME = 'ETL_START'\n      GROUPE PAR JOB_NAME, SID\n    ) start_job \/* d\u00e9marre *\/\n  SUR d_job.dummy = start_job.dummy\n  JOINDRE EXT\u00c9RIEUR GAUCHE\n    ( S\u00c9LECTIONNER JOB_NAME, SID\n      DE UTL_JOB_STATUS\n      O\u00d9 JOB_NAME = 'RPT_ACCESS_LOG' \/* nom de job PARAM\u00c8TRE *\/\n\t    ET STEP_NAME IN ('ETL_END', 'ETL_ERROR') \/* statut d'arr\u00eat *\/\n      GROUPE PAR JOB_NAME, SID\n    ) end_job \/* termine *\/\n  SUR start_job.JOB_NAME = end_job.JOB_NAME\n     ET start_job.SID = end_job.SID<\/code><\/pre>\n<p>\nCaract\u00e9ristiques de la table :<\/p>\n<ul>\n<li>Le d\u00e9but et la fin de la proc\u00e9dure de traitement des donn\u00e9es doivent \u00eatre accompagn\u00e9s des \u00e9tapes ETL_START et ETL_END<\/li>\n<li>En cas d'erreur, une \u00e9tape ETL_ERROR doit \u00eatre cr\u00e9\u00e9e avec sa description<\/li>\n<li>Le nombre de donn\u00e9es trait\u00e9es doit \u00eatre mis en \u00e9vidence, par exemple, par des ast\u00e9risques<\/li>\n<li>La m\u00eame proc\u00e9dure peut \u00eatre lanc\u00e9e simultan\u00e9ment avec le param\u00e8tre force_restart=y, sans cela, le num\u00e9ro de session n'est fourni qu'\u00e0 la proc\u00e9dure termin\u00e9e <\/li>\n<li>En mode normal, il n'est pas possible de lancer simultan\u00e9ment la m\u00eame proc\u00e9dure de traitement des donn\u00e9es<\/li>\n<\/ul>\n<p>\nLes op\u00e9rations n\u00e9cessaires pour travailler avec la table sont les suivantes :<\/p>\n<ul>\n<li>Obtenir le num\u00e9ro de session de la proc\u00e9dure ETL en cours d'ex\u00e9cution<\/li>\n<li>Ins\u00e9rer un enregistrement de log dans la table<\/li>\n<li>Obtenir le dernier enregistrement r\u00e9ussi de la proc\u00e9dure ETL<\/li>\n<\/ul>\n<p>\nDans des bases de donn\u00e9es comme Oracle ou Postgres, ces op\u00e9rations peuvent \u00eatre r\u00e9alis\u00e9es \u00e0 l'aide de fonctions int\u00e9gr\u00e9es. Pour SQLite, un m\u00e9canisme externe est n\u00e9cessaire et dans ce cas, il <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\/blob\/master\/utl_func.php\">est prototyp\u00e9 en PHP<\/a><\/noindex>.<\/p>\n<h4>Sortie<\/h4>\n<p>\nAinsi, les messages d'erreur dans les outils de traitement des donn\u00e9es jouent un r\u00f4le m\u00e9ga-important. Mais il est difficile de les qualifier d'optimaux pour une recherche rapide de la cause du probl\u00e8me. Lorsque le nombre de proc\u00e9dures approche la centaine, la surveillance des processus devient un projet complexe.<\/p>\n<p>L'article pr\u00e9sente un exemple d'une possible solution au probl\u00e8me sous la forme d'un prototype. L'ensemble du prototype d'un petit entrep\u00f4t est disponible sur GitLab <noindex><a rel=\"nofollow\" href=\"https:\/\/gitlab.com\/marchanka\/sqlite-php-etl-utilities\">Utilities ETL SQLite PHP<\/a><\/noindex>.<br \/>\n<br \/>Source : <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\/fr\/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=\"fr_FR\" \/>\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\/fr\/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\udd47Surveillance des processus ETL dans un petit entrep\u00f4t de donn\u00e9es | ProHoster","description":"Beaucoup utilisent des outils sp\u00e9cialis\u00e9s pour cr\u00e9er des proc\u00e9dures d'extraction, de transformation et de chargement de donn\u00e9es dans des bases de donn\u00e9es relationnelles.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/monitoring-etl-protsessov-v-malenkom-hranilishhe-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/37701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=37701"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/37701\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/28295"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=37701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=37701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=37701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}