Bonjour,
J'ai une chaine de traitement SQL qui tourne via un ETL branché sur MYSQL 5.5.
La donnée doit transiter d'une BDD en mode "archive" à un mode "relationnel".
Dans la BDD 1 "archive" , chaque ligne a un id unique en clef primaire avec aussi en clef primaire : index + clef + clef unique les éléments qui permettent de dire "cette ligne est unique grace à la combinaison des champs XYZ".
Pour notre exemple je me base sur un table contrat avec id ligne + numéro de contrat + date d'insertion de la ligne + statut du contrat.
Entre aujourd'hui est hier 3 choix s'offrent à moi pour le différentiel :
Cas 1 : avoir un système de calcul d'id a partir de la BDD 1 en calculant l'id max du jour et l'id max de de la veille ... Sachant qu'entre mes deux BDD les spécificités techniques imposent des id différents ... Il faut commencer à gérer une usine à gaz de 2 connexions entre 2 BDD sur 2 serveurs différents. Bref je vous laisse imaginer le cirque ...
Cas 2 : utiliser le différentiel via les X dernières heures , au risque d'avoir une plage horaire trop importe ou pas assez (doublon ou données manquantes ... )
Cas 3 : je fais un " select * " + filtre sur ce qui m’intéresse . J'ai donc "toutes" les données nouvelles + celles déjà intégrées . Avantage mon ETL peut filtrer et comparer si une combinaison de données est déjà présente , auquel cas il éjecte la ligne et n'injecte que celle pas encore présente en BDD d'arrivée.
Le cas 3 permet d’éviter de gérer des filtres et un bordel sans nom au niveau des calculs de max .
Selon vous quelle solution prendre ?
Besoin de détail ?
Merci de m'aiguiller
Partager