|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() |
Bonjour,
Je suis nouveau dans le monde des ETL et surtout celui de Talend, J'aurais une question assez basique : est il possible de faire une chaîne de jobs qui se comporte comme une transaction ? C.a.d en cas de problème dans l'un des sous jobs ==> Rollback pour tout les sous jobs. Je précise que dans la chaîne de jobs il en existe certains qui manipulent des fichiers et non une base de données. Mon objectif étant réaliser une chaîne de jobs capable de laisser la totalité du système (source, et les différentes cibles) dans un état cohérent. Merci d'avance. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 812 ![]() |
Dans Talend, on gère généralement la transaction au niveau du job.
Donc si l'alimentation est organisé dans le même job sans sous jobs (tRunJob) alors ce sera facile à faire. Si le but est de créer une sorte de séquenceur qui lancera un seul et qui devra tout faire dans une seule transaction alors je conseillerai de passer par des tables de travail intermédiaires. Alimenter ces tables et finalement dans un seul job copier le contenu de ces tables dans les tables finales. Dans certains cas ça risque d'être difficile. D'autres stratégies sont possibles. A voir avec le niveau de cohérence demandé ^^
__________________
Pensez à la fonction Recherche |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() |
Bonjour Benoit,
Merci pour ta réponse, Ce qui me pose problème, c'est surtout au niveau des fichiers. lorsque j'ai un job dans lequel au milieu (entre deux BDD), j'ai une exportation en *.CSV. Comment garantir la cohérence du système si un crache du système survient lors de l’écriture de ce fichier *.csv. Je dois être en mesure de dire au job de reprendre à partir de l'étape où il a échoué et de ne pas prendre en compte le précédent fichier car il n'est pas bon. Je suppose que c'est à moi de gérer cela dans le job et qu'il n'existe pas de mécanisme pour gérer les transactions sur une chaîne de jobs. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 812 ![]() |
Avec TOS c'est possible en mettant tout une architecture de suivi des alimentations dans des tables. Le but est de repérer le job qui a planté et de relancer à partir de ce dernier via le séquenceur.
Si c'est pour ne pas traiter certains fichiers qui seraient incorrectes, il faudrait les déplacer dans un dossier d'erreur lorsqu'ils sont détectés par exemple.
__________________
Pensez à la fonction Recherche |
|
|
00
|
|
|
#5 | |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Citation:
Effectivement cela doit être géré dans chaque job. Il n'y a que sur les accès base de données que l'on peut gérer des systèmes de commit et de rollback. De manière générale, je conseille de faire en sorte que chaque traitement unitaire (du point de vue de l'ordonnancement) soit réentrant. Cela permet de relancer le traitement en cause sans avoir à réaliser d'opération manuelle. C'est la plupart du temps réalisable sans trop se prendre la tête et permet une exploitation nettement simplifiée. Nicolas |
|
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() |
Merci pour toute vos réponses,
Je suppose Benoit, que le séquenceur n'existe pas dans la version Open studio de Talend (Peux tu me le confirmer ?). |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 812 ![]() |
Un séquenceur dans Talend (contrairement à Datastage par exemple) est un job comme un autre. A vous de le créer comme bon vous semble.
Le composant tRunJob qui permet de lancer d'autres jobs est dispo dans TOS. A partir de cela il est possible de faire un séquenceur.
__________________
Pensez à la fonction Recherche |
|
|
00
|
|
|
#8 | |
|
Invité régulier
![]() abdo CHEIngénieur développement logiciels Inscription : novembre 2009 Messages : 6 ![]() |
Citation:
J'ai le même problème: J'ai un job avec deux insertions dans deux tables, 1 au niveau d'une base de données oracle et le 2 emme au niveau d'une base de données Mysql Mon besoin c'est de faire un Rollback générale cad: si j’insère une ligne dans le 1 er table, alors que cette insertion n'a pas eu lieu alors pas de commit au niveau de la 2 emme table ie: soit commit pour les deux SGBD soit rollback pour les deux. Merci d'avance |
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Benoit DurandConsultant en Business Intelligence Freelance Inscription : mars 2005 Messages : 812 ![]() |
Si les 2 sous-jobs sont OK alors il faut faire un commit et si l'un d'entre eux est KO alors il faut faire un rollback.
La qestion est donc de comment savoir que les 2 sont OK. Il faut peut être gratter dans le code généré pour voir si des variables sont mises à jour à la fin des sous-jobs. Sinon il sera possible de faire un +1 dans une variable globale lorsque chaque sous-job est ok et de tester cette variable. Si elle est égal à 2 alors commit sinon rollback.
__________________
Pensez à la fonction Recherche |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com