IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Clé étrangéres dans une table Oracle


Sujet :

Développement de jobs

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Points : 60
    Points
    60
    Par défaut Clé étrangéres dans une table Oracle
    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

  2. #2
    co2
    co2 est déconnecté
    Membre éclairé
    Avatar de co2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 182
    Points : 829
    Points
    829
    Par défaut
    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
    Cédric Carbone, Talend CTO
    Blog sur Talend, la Business Intelligence et l'intégration de données | Télécharger Talend Open Studio 3.2 / TOP 3.2
    Le forum Talend francophone | anglophone

    Actu : Offre d'emploi Consultants Talend |
    Tu as la réponse à ta question ? Clique sur en bas à gauche de ton message

  3. #3
    Membre régulier
    Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2003
    Messages : 94
    Points : 116
    Points
    116
    Par défaut
    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

  4. #4
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 93
    Points : 60
    Points
    60
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    co2
    co2 est déconnecté
    Membre éclairé
    Avatar de co2
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 182
    Points : 829
    Points
    829
    Par défaut
    Citation Envoyé par Flipmode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...
    Cédric Carbone, Talend CTO
    Blog sur Talend, la Business Intelligence et l'intégration de données | Télécharger Talend Open Studio 3.2 / TOP 3.2
    Le forum Talend francophone | anglophone

    Actu : Offre d'emploi Consultants Talend |
    Tu as la réponse à ta question ? Clique sur en bas à gauche de ton message

Discussions similaires

  1. Definir une clé étrangère dans une table existante?
    Par gui38 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/12/2006, 13h54
  2. Réponses: 3
    Dernier message: 28/11/2006, 08h44
  3. Réponses: 3
    Dernier message: 09/09/2006, 13h24
  4. Réponses: 5
    Dernier message: 28/04/2006, 11h55
  5. supprimer un enregistrement vide dans une table oracle
    Par shurized dans le forum Bases de données
    Réponses: 11
    Dernier message: 07/09/2004, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo