Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/04/2007, 17h54   #1
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 94
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 94
Points : 28
Points : 28
Par défaut Clé étrangéres dans une table Oracle avec TALEND?

Bonjour,

J'aimerais savoir si avec TALEND je pouvais définir des clés étrangéres dans une table Oracle ? J'ai essayé avec un tOracleRow en ecrivant une requete SQL mais ça n'a pas marché

Car en faite je crée ma table, je définis mes clés étrangéres sous Oracle mais ensuite dès que j'execute mon job (FileInputCsv->tOracleOutput) j'ai une erreur qui s'affiche en signalant qu'il y a un problème avec les foreign keys.

Comment est ce que je peux régler ce problème?

Merci
Flipmode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 10h35   #2
co2
Membre émérite
 
Avatar de co2
 
Inscription : mai 2002
Messages : 182
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 182
Points : 823
Points : 823
Envoyer un message via Skype™ à co2
Citation:
Envoyé par Flipmode
Car en faite je crée ma table, je définis mes clés étrangéres sous Oracle mais ensuite dès que j'execute mon job (FileInputCsv->tOracleOutput) j'ai une erreur qui s'affiche en signalant qu'il y a un problème avec les foreign keys.
Il faut que tu orchestres (lien runBefoire/runAfter) tes différents sousjob de remplissage de tables suivant le bon ordre :
1/ tu inseres tes données dans ta table parent
2/ tu inseres tes données dans ta table fils qui dispose d'une colonne qui reference une entrée de ta table parent (il faut donc que l'entrée (de la table parent) référencée soit prealablement présente si tu ne veux pas avoir de pb de foreign key).

Cédric
co2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 10h43   #3
Membre régulier
 
Inscription : juillet 2003
Messages : 83
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 83
Points : 90
Points : 90
Bonjour,

En passant par 1 table intermédiaire qui ne possède pas de contraintes référentielles (c'est bien ça que tu appelles clé etrangère).
Cette table a même structure physique que la table cible finale qui possède ces contraintes.
La vérification de chacune des clés étrangères passe par une requête SQL d'évalution basée sur la clause EXISTS pour détecter les lignes qui à coup sur généreront 1 exception si tu tentes de les intégrer comme telle dans la table finale

Dans la démarche, tu insères toutes les lignes qui n'ont pas de clés etrangères inexistantes dans la table cible finale
ET
tu isoles dans une table de recyclage toutes celles qui ont des soucis avec 1 ou plusieurs clés etrangères.
Au passage tu listes dans un fichier de log ou 1 table la liste des enregistrements en défaut et pourquoi pas la cause
Facilement réalisable tout ça dans 1 job TALEND

On peut imaginer sous TALEND la mise en place de contrainte logique comme la contrainte de clé étrangère par exemple avec un mapper particulier qui pousserait les bons enregs en sortie OK et les mauvais dans une sortie dérivée non OK.
ça arrivera probablement dans leur future release...

A noter que Sunopsis offre ce mécanisme particulèrement interressant pour facilement faire de la qualité de données.

Cordialement

Selecta
selecta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2007, 16h45   #4
Nouveau Membre du Club
 
Inscription : avril 2007
Messages : 94
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 94
Points : 28
Points : 28
Par défaut Encore besoin de vous

Merci Cedric et merci selecta pour les explications

Je travaille de nouveau sur Talend Open Source et j’ai un petit problème d’intégration de données. Je veux envoyer les données d’un fichier Excel vers une table de la base de données Oracle.
Jusque la rien de difficile, le problème c’est que la table est déjà créée et elle possède déjà des contraintes (2 clés étrangères ont été déclarées). Ces 2 clés pointent vers 2 autres tables de la meme base de données.
Le problème c’est que lorsque je fais mon job (integration des données de mon fichier vers la table), je ne prends pas en compte les clés étrangéres de la table et j’ai donc un message d’erreurs lors de l’éxécution du job

Code :
Exception IN component tOracleOutput_1 java.sql.SQLException: ORA-02291: integrity constraint (ZONE_URBAINE_FKC) violated - parent KEY NOT found at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:305) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:272) at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:623) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:181) at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:543) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1028) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2888) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:2960) at test.test.TEST.tFileInputCSV_1Process(TEST.java:759) at test.test.TEST.main(TEST.java:991)

J’ai cherché sur le site de Talend, dans les tutoriaux, sur le net mais j’ai rien trouvé et je ne sais pas comment résoudre ce problème.

Comment faire pour résoudre ce problème d’integrité de contrainte ?
Comment je peux faire pour gérer les clés étrangères ?

Merci

Philippe
Flipmode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2007, 21h48   #5
co2
Membre émérite
 
Avatar de co2
 
Inscription : mai 2002
Messages : 182
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 182
Points : 823
Points : 823
Envoyer un message via Skype™ à co2
Citation:
Envoyé par Flipmode
Code :
Exception IN component tOracleOutput_1 java.sql.SQLException: ORA-02291: integrity constraint (ZONE_URBAINE_FKC) violated - parent KEY NOT found
J’ai cherché sur le site de Talend, dans les tutoriaux, sur le net mais j’ai rien trouvé et je ne sais pas comment résoudre ce problème.

Comment faire pour résoudre ce problème d’integrité de contrainte ?
Comment je peux faire pour gérer les clés étrangères ?
Hello Philippe,

En fait ce n'est pas un pb lié à l'ETL mais plutot aux séquencements de tes jobs d alimentation. Dans ton cas, il faut que tu alimentes d'abord la table de références qui contient tes ZONE_URBAINE (afin que tes enregistrements fils qui font référence à ta zone urbaine puissent être insérés sans violer la clé étrangere ZONE_URBAINE_FKC)

Dans le cas où ton séquencement était deja bon cela veut dire qu'il te manque des ZONE_URBAINE par rapport aux données que tu essayes d insérer.
Dans ce cas, avec Talend, tu peux utiliser un tMap (dont en source principale tu auras tes données à insérer et comme source lookup ta table des ZONE_URBAINE) afin que tu ne tentes d'insérer dans ta base que les lignes dont le lookup aura été réalisé (penser à cocher dans le tMap la case 'inner join') et rejeter dans un fichier (ou une table de rejet) les enregistrements dont la ZONE-URBAINE n'est pas référencée (pour cela activer le bouton violet 'Enable lookup inner join reject')

Cédric

PS : Désolé pour le temps de reponse (une dizaine de jours!) mais je réponds sur les forums plutot le soir et je n'avais plus internet chez moi...
co2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h10.


 
 
 
 
Partenaires

Hébergement Web