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

  1. #1
    Membre expérimenté
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    mars 2004
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2004
    Messages : 1 386
    Points : 1 709
    Points
    1 709

    Par défaut "insert or update" en mode bulk avec TMap

    Bonjour,

    j'essaye de faire un insert / update en mode bulk.

    Nom : talend1.png
Affichages : 22
Taille : 18,5 Ko

    Nom : talend2.png
Affichages : 22
Taille : 19,8 Ko



    row1 est la source des donnees, et row2 la destination. je fais une jointure sur les cles de ces 2 flux de donnees.

    de l'autre cote. InsStat est la sorti lorsque Catch lookup inner join rejeted est a true. donc les donnees de row1 qui ne sont pas dans row2, il font donc les ajouter.

    UpStat est la sorti lorsque Catch lookup inner join rejeted est a false. donc les donnees de row1 qui sont dans row2, il faut donc faire une mise a jour.


    a la sorti de chaque je met un outputBulkExec (car il y'a plus de 500 000 ligne, et donc un simple output ne sera pas optimal) correspondant a la tache a faire.



    le probleme est celui ci :

    1) lorsque j'essaye avec un jeu de donnee (disons A = 200) il va bien dans InsStat et donc dans la BD.

    2) lorsque je remet les memes donnees (A), en principe il devrait aller vers UpStat (donc une mise a jour). mais il essaye plutot de faire un ajour avec InsStat. Evidement il ne pourra pas car il y'a pas de nouvelles donnees. et donc il renvoir cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [FATAL]: test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat - tDBOutputBulkExec_1_tVBE No record was inserted into component tDBOutputBulkExec_1_tVBE
    java.lang.RuntimeException: No record was inserted into component tDBOutputBulkExec_1_tVBE
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.tRunJob_1Process(test_ViewBuilder_Stat.java:10340)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.tRunJob_2Process(BASIV_ViewBuilder_Stat.java:12991)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.runJobInTOS(test_ViewBuilder_Stat.java:13560)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.main(test_ViewBuilder_Stat.java:13296)

    3) lorsque j'essaye avec un jeu de donnees (B = A +200), il enregistre bien les nouvelles donnees via insStat, mais pour ceux qui doivent etre mis a jour, il renvoit ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [‎12/‎3/‎2018 6:41 PM] 
    Number of records inserted into table TESTBI.DWH_STAT by tDBOutputBulkExec_1_tVBE: 2000
    [FATAL]: test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat - tDBOutputBulkExec_2_tVBE [Vertica][VJDBC](4876) ROLLBACK: Table "tmp_tDBOutputBulkExec_2_tVBE20181203122956_DNj6r1" does not exist
    java.sql.SQLSyntaxErrorException: [Vertica][VJDBC](4876) ROLLBACK: Table "tmp_tDBOutputBulkExec_2_tVBE20181203122956_DNj6r1" does not exist
    	at com.vertica.util.ServerErrorData.buildException(Unknown Source)
    	at com.vertica.dataengine.VQueryExecutor.executeSimpleProtocol(Unknown Source)
    	at com.vertica.dataengine.VQueryExecutor.execute(Unknown Source)
    	at com.vertica.jdbc.common.SStatement.executeNoParams(Unknown Source)
    	at com.vertica.jdbc.common.SStatement.execute(Unknown Source)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.tRunJob_1Process(test_ViewBuilder_Stat.java:13086)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.tRunJob_2Process(test_ViewBuilder_Stat.java:15855)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.runJobInTOS(test_ViewBuilder_Stat.java:16424)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.main(test_ViewBuilder_Stat.java:16160)
    Caused by: com.vertica.support.exceptions.SyntaxErrorException: [Vertica][VJDBC](4876) ROLLBACK: Table "tmp_tDBOutputBulkExec_2_tVBE20181203122956_DNj6r1" does not exist

    Voila en gros.

    j'ai l'impression que lorsqu'il doit faire la mise a jour (2), il tente neamoins de faire l'insertion. et une erreur est genere.

    lorsq'il l'insertion est faite et que la mise a jour doit suivre ... il ne voit pas la table.


    Comment resoudre ce probleme ??

    est ce qu'il y'a une autre methode de faire une insert or update en mode bulk ??

    Merci
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  2. #2
    Membre éclairé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juin 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juin 2012
    Messages : 360
    Points : 768
    Points
    768

    Par défaut

    Bonjour,

    Quelles sont les conditions de filtres sur les sorties du tMap ? L'une d'elle doit être mauvaise si une ligne en update part vers le insert.

  3. #3
    Membre expérimenté
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    mars 2004
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2004
    Messages : 1 386
    Points : 1 709
    Points
    1 709

    Par défaut

    Bonsoir ...

    la seule modification que j'ai fait c'est ceci

    InsStat est la sorti lorsque Catch lookup inner join rejeted est a true.

    UpStat est la sorti lorsque Catch lookup inner join rejeted est a false.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  4. #4
    Membre expérimenté
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    mars 2004
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2004
    Messages : 1 386
    Points : 1 709
    Points
    1 709

    Par défaut

    Alors j'ai un peu avancer.

    Visiblement tout semble OK.

    le probleme viendrais du tDBBulkExec, il n'arrive pas a s'executer

    j'ai systematiquement cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Number of records inserted into table TESTBI.DWH_STAT by tDBOutputBulkExec_1_tVBE: 2000
    [FATAL]: test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat - tDBOutputBulkExec_2_tVBE [Vertica][VJDBC](4876) ROLLBACK: Table "tmp_tDBOutputBulkExec_2_tVBE20181203122956_DNj6r1" does not exist
    java.sql.SQLSyntaxErrorException: [Vertica][VJDBC](4876) ROLLBACK: Table "tmp_tDBOutputBulkExec_2_tVBE20181203122956_DNj6r1" does not exist
    	at com.vertica.util.ServerErrorData.buildException(Unknown Source)
    	at com.vertica.dataengine.VQueryExecutor.executeSimpleProtocol(Unknown Source)
    	at com.vertica.dataengine.VQueryExecutor.execute(Unknown Source)
    	at com.vertica.jdbc.common.SStatement.executeNoParams(Unknown Source)
    	at com.vertica.jdbc.common.SStatement.execute(Unknown Source)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.tRunJob_1Process(test_ViewBuilder_Stat.java:13086)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.tRunJob_2Process(test_ViewBuilder_Stat.java:15855)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.runJobInTOS(test_ViewBuilder_Stat.java:16424)
    	at test.test_viewbuilder_stat_0_1.test_ViewBuilder_Stat.main(test_ViewBuilder_Stat.java:16160)
    Caused by: com.vertica.support.exceptions.SyntaxErrorException: [Vertica][VJDBC](4876) ROLLBACK: Table "tmp_tDBOutputBulkExec_2_tVBE20181203122956_DNj6r1" does not exist

    voila ma config

    Nom : talend3.png
Affichages : 13
Taille : 16,7 Ko
    Nom : talend4.png
Affichages : 13
Taille : 15,9 Ko
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  5. #5
    Membre éclairé Avatar de MythOnirie
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juin 2012
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juin 2012
    Messages : 360
    Points : 768
    Points
    768

    Par défaut

    La table existe bien en base ? C'est ce que semble indiquer l'erreur affichée.

  6. #6
    Membre expérimenté
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    mars 2004
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2004
    Messages : 1 386
    Points : 1 709
    Points
    1 709

    Par défaut

    Citation Envoyé par MythOnirie Voir le message
    La table existe bien en base ? C'est ce que semble indiquer l'erreur affichée.
    Oui elle existe bien, Et un autre BulkExec (celui de l'insert) l'utilise.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

Discussions similaires

  1. Insertion en mode bulk en talend toraclebulkexec, ctl file
    Par fetano dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 12/07/2014, 17h39
  2. [10g] Insertion de masse en mode bulk
    Par donny dans le forum PL/SQL
    Réponses: 2
    Dernier message: 09/08/2013, 17h21
  3. Update quote et sécurité
    Par grunk dans le forum Zend_Db
    Réponses: 1
    Dernier message: 26/10/2010, 16h59
  4. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL-Server
    Réponses: 3
    Dernier message: 24/12/2004, 16h40
  5. [Débutant][PS] modifier un insert en update
    Par franculo_caoulene dans le forum MS SQL-Server
    Réponses: 5
    Dernier message: 19/05/2004, 17h33

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