En résumé
Un pipeline ETL se construit dans ses onglets : on y écrit ou génère les scripts SQL, on choisit les bases source et cible, on exécute la chaîne dans l’onglet Pipeline, puis l’onglet Contrôle qualité compare les deux bases pour dire si la conversion a perdu quelque chose.
Un pipeline se crée depuis la page Pipelines ETL de l’entrepôt. Ses scripts désignent les bases par leur rôle — source., target., vocab. — comme l’explique la page d’ensemble ; cette page suit le reste, onglet par onglet.
Les onglets
| Onglet | Ce qu’on y fait |
|---|---|
| Pipeline | Le tableau de bord d’exécution : les scripts en cartes, dans l’ordre où ils s’enchaînent. C’est ici qu’on choisit les bases source et cible, qu’on réordonne, qu’on active ou désactive une étape et qu’on lance. |
| Scripts | L’éditeur proprement dit, avec le résultat des requêtes — et le bouton Générer depuis les schémas. |
| Explorer les schémas | Voir côte à côte les tables de la source et celles de la cible — indispensable quand on écrit la correspondance. |
| Vocabulaire | Générer les scripts de vocabulaire depuis un projet d’alignement de concepts. |
| Contrôle qualité | Vérifier ce que l’exécution a produit : les effectifs des deux bases, et le détail concept par concept de ce qui a été aligné. |
S’y ajoutent Aperçu, Readme, Licence et Versioning, comme pour les autres entités.
Seuls les fichiers SQL sont des étapes
Le dossier d’un pipeline peut contenir d’autres fichiers — un README en Markdown, des notes, du code d’appoint en Python ou en R. Ils voyagent avec le pipeline, mais l’onglet Pipeline ne montre que les fichiers .sql, et c’est eux seuls qu’une exécution enchaîne. Un fichier Markdown ouvert dans l’onglet Scripts s’affiche en aperçu plutôt que d’être exécuté.
Écrire les scripts
Un script ETL est du SQL ordinaire, que l’on peut écrire entièrement à la main. Mais l’essentiel d’une conversion vers OMOP se déduit de ce que Linkr sait déjà, et deux générateurs l’écrivent à votre place :
- Générer depuis les schémas, dans l’onglet Scripts — les scripts qui chargent les patients, les séjours et les événements, déduits du mapping de schéma de la source et de celui de la cible.
- L’onglet Vocabulaire — les scripts qui chargent la traduction de vos codes locaux, déduits d’un projet d’alignement de concepts.
Ce qu’ils produisent reste des scripts ordinaires, que vous relisez et modifiez ; Linkr repère ensuite ceux que vous avez retouchés avant de les régénérer. Tout est détaillé dans Générer les scripts.
Exécuter, et vérifier
L’onglet Pipeline montre la chaîne telle qu’elle s’exécutera : la base source en haut, les scripts SQL dans leur ordre, la base cible en bas. On y choisit les deux bases, on glisse une carte pour la déplacer, on désactive une étape avec son interrupteur, et le bouton Exécuter le pipeline lance le tout. Chaque carte a aussi son propre bouton, pour exécuter un script isolé pendant la mise au point.
Cliquez sur un nœud pour voir les détails
La progression s’affiche dans la barre d’outils, requête par requête, avec le nom du script en cours et le temps écoulé — sur un script de vocabulaire dont une seule instruction peut durer plusieurs minutes, c’est ce qui distingue un traitement qui avance d’un blocage. Une exécution qui échoue s’arrête au premier script en erreur, et Linkr ouvre directement le panneau de détail sur le script fautif.
Les scripts s’exécutent dans l’ordre des cartes, pas dans celui de leurs noms. Quand les deux divergent — un script 35_… glissé après un 50_… —, le bouton de tri alphabétique de la barre d’outils les réaligne ; il est grisé quand l’ordre suit déjà les noms.
Mettre en pause et arrêter ne sont pas la même chose
Pause suspend l’exécution sans la terminer : la reprise relance depuis son début le script interrompu, puis continue, dans la même exécution.
Arrêter y met fin. Dans les deux cas, l’instruction déjà envoyée à la base va jusqu’au bout — une partie du script a donc pu être appliquée. Sur une base cible à moitié remplie, mieux vaut la recréer à vide plutôt que relancer par-dessus.
Ensuite vient l’onglet Contrôle qualité, qui répond à la seule question qui compte : la conversion a-t-elle perdu quelque chose ? Il propose deux vues.
| Statut | Vocabulaire source | Code source | Description | Patients source | Lignes source | ID cible | Lignes attendues | Lignes cible |
|---|---|---|---|---|---|---|---|---|
| Absent | REA_LOCAL | BIO_PCT | Procalcitonine | 812 | 2 140 | 44817130 | 2 140 | 0 |
| Moins | REA_LOCAL | BIO_K | Potassium sérique | 3 021 | 48 902 | 3023103 | 48 902 | 46 115 |
| Plus | REA_LOCAL | BIO_NA | Sodium sérique | 3 019 | 48 877 | 3019550 | 48 877 | 49 012 |
| OK | REA_LOCAL | VS_FC | Fréquence cardiaque | 3 102 | 912 440 | 3027018 | 912 440 | 912 440 |
| OK | REA_LOCAL | VS_SPO2 | SpO2 | 3 098 | 887 310 | 40762499 | 887 310 | 887 310 |
| OK | REA_LOCAL | VS_TEMP | Température | 3 087 | 201 544 | 3020891 | 201 544 | 201 544 |
Statistiques met les deux bases côte à côte : patients, hospitalisations, séjours en unité, répartition par sexe, durées de séjour, et le nombre de lignes de chaque table. Un écart inattendu — trois mille patients d’un côté, deux mille huit cents de l’autre — signale une jointure qui a éliminé des lignes en silence.
Concepts est plus fin, et fonctionne autrement qu’on ne l’imagine : les deux colonnes sont lues dans la base cible. Une base source dans son format d’origine n’a pas de colonnes comparables ; en revanche, une fois convertie en OMOP, chaque table porte à la fois le concept d’origine et le concept standard auquel il a été aligné. Comparer les deux dit exactement combien de lignes sont arrivées avec un code source, et combien ont effectivement trouvé une correspondance.
Chaque concept reçoit un verdict — Absent, Moins, Plus ou OK — utilisable comme filtre, et le tout s’exporte en CSV. « Absent » est celui qu’on regarde en premier : des lignes sont arrivées, aucune n’a été alignée.
La colonne « Lignes attendues » n'est pas redondante
Quand plusieurs codes source pointent vers le même concept cible, le nombre de lignes d’un code pris isolément ne correspond pas au total attendu. La colonne affiche donc la somme de tous les codes qui alimentent ce concept — sans quoi un verdict « OK » à côté de deux nombres différents ressemblerait à un bug.
Les comptages patients demandent un schéma des deux côtés
Sans mapping de schéma sur une base, Linkr ne sait pas ce qu’est un patient : il ne peut compter que des lignes par table. Voir Schémas.
Pour aller plus loin
- Générer les scripts — les scripts de chargement OMOP et de vocabulaire, écrits par Linkr.
- Pipelines ETL — les rôles source, cible et vocabulaire, et le partage d’un pipeline.
- Bases de données — créer la base cible vide depuis un schéma.
- Schémas — indispensables aux comptages patients du contrôle qualité.
- Qualité des données — contrôler la base cible une fois remplie.