Bonjour,
j'essaye de faire un insert / update en mode bulk.
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
Partager