Bonjour à tous !
Voilà j'ai un problème assez surprenant avec BODI (en version XI 11.5) : j'ai une Query qui se révèle être atrocement coûteuse en temps alors qu'il n'y a qu'une simple jointure (soit prêt de 11h au total pour cette partie du Job). Pourriez-vous me dire ce qui ne vas pas dans mon flux ??
Voici comment il est construit :
- Je pars d'une table de l'ODS que l'on appelera TT_ODS_SPA_IND_ECCORD_TMP3
- Je fais, dans une première Query, un mapping standard sur touts les champs hormis deux : l'un est obtenu à partir d'un lookup sur une table extérieure au flux, l'autre contient simplement un "day_in_week"...
- Je fais une deuxième Query où je remape tous mes champs et à l'aide d'une autre table source contenant les années, je mappe mon champ ID_JRN à l'aide d'un "ifthenelse"...
- Enfin je fais une troisième (et dernière) Query qui est celle qui semble poser problème. Dans cette Query, je remape tous mes champs à partir de Query2 sauf pour un champ où je fais intervenir une 3ème table source contenant des tranches horaires de 5min (00:00 - 00:05 ; 00:05 - 00:10...) afin de mapper tout simplement mon ID_HRE05, je rajoute tout de même la clause WHERE suivante pour faire la jointure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Query_2.ID_HRE >= TT_SPA_HRE_05M.HRE_DEB AND (Query_2.ID_HRE < TT_SPA_HRE_05M.HRE_FIN OR TT_SPA_HRE_05M.HRE_FIN = '00.00.00')- Au final, j'alimente ma table cible avec les options standard et en Delete before Loading...
Pour vous rendre mieux compte, j'ai recomposé la requête complète à l'aide de BODI :
Quand je la lance directement sur Oracle, elle s'exécute en seulement 600ms !
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 SELECT TT_ODS_SPA_IND_ECCORD_TMP3.ID_VOL , TT_ODS_SPA_IND_ECCORD_TMP3.ID_CMP , TT_ODS_SPA_IND_ECCORD_TMP3.ID_JRN , TT_ODS_SPA_IND_ECCORD_TMP3.ID_HRE , TR_DWH_SPA_ANN.DEB_DAT_ETE , TR_DWH_SPA_ANN.FIN_DAT_ETE , TT_ODS_SPA_IND_ECCORD_TMP3.ID_SCE_IAT , TT_ODS_SPA_IND_ECCORD_TMP3.ID_VER_COH , TT_ODS_SPA_IND_ECCORD_TMP3.ID_AEP , TT_ODS_SPA_IND_ECCORD_TMP3.ID_SAI_IAT , TT_SPA_HRE_05M.ID_HRE_05M , TT_ODS_SPA_IND_ECCORD_TMP3.ID_SRC , TT_ODS_SPA_IND_ECCORD_TMP3.ID_TAS_COH , TT_ODS_SPA_IND_ECCORD_TMP3.ID_VER , TT_ODS_SPA_IND_ECCORD_TMP3.ID_TYP_MVT , TT_ODS_SPA_IND_ECCORD_TMP3.ID_SOU_TYP_AVI , TT_ODS_SPA_IND_ECCORD_TMP3.ID_CLR , TT_ODS_SPA_IND_ECCORD_TMP3.NB_MVT , TT_SPA_HRE_05M.HRE_DEB , TT_SPA_HRE_05M.HRE_FIN FROM SPA_DATA.TR_DWH_SPA_ANN TR_DWH_SPA_ANN, SPA_ODS.TT_ODS_SPA_IND_ECCORD_TMP3 TT_ODS_SPA_IND_ECCORD_TMP3, SPA_ODS.TT_SPA_HRE_05M TT_SPA_HRE_05M WHERE TR_DWH_SPA_ANN.ID_ANN = to_char(TT_ODS_SPA_IND_ECCORD_TMP3.ID_JRN , 'YYYY') AND TT_ODS_SPA_IND_ECCORD_TMP3.ID_HRE >= TT_SPA_HRE_05M.HRE_DEB AND ( TT_ODS_SPA_IND_ECCORD_TMP3.ID_HRE < TT_SPA_HRE_05M.HRE_FIN OR TT_SPA_HRE_05M.HRE_FIN = '00.00.00' )
J'aimerais bien comprendre ce qui fait prendre autant de temps à ma Query sous BODI...
Merci d'avance pour votre aide !
Partager