|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : avril 2007 Messages : 94 ![]() |
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 |
|
|
00
|
|
|
#2 | |
|
Membre émérite
![]() ![]() |
Citation:
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 |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : juillet 2003 Messages : 83 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : avril 2007 Messages : 94 ![]() |
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 |
|
|
00
|
|
|
#5 | |
|
Membre émérite
![]() ![]() |
Citation:
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... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com