优化前:报表分为三块内容。sql第一阶段先把三块日报数据放到表中,第二阶段依赖第一阶段结果作出符合指标,依次insert into进去,第三阶段将三部分统一作出钆差放到表中。在这个场景下,随着复合指标越来越多,insert into部分达到近50个,jvm频繁开启,导致任务运行时长过长,最后运行时间短的话80分钟,长的话120分钟。
优化方式:这种场景下,无关乎数据倾斜,文件数等因素,所以参数优化已然不适用,所以采用sql逻辑优化,因为这个里面分为三部分,所以将三部分内容拆开来进行,第一阶段耗时10分钟以内,所以不用拆,当作开头任务,将三份数据放到同一个表里,将第二个insert into阶段拆成代驾,新桔,代物流和代保养这三个任务,然后都依赖开头任务,同时跑,同时往里面插入数据。第三个阶段做成第五个任务,依赖前面234这三个任务,等三部分执行完毕,将数据汇总,在这时候去同一做钆差
优化后:由于insert into部分分三个同时进行,以此缩短运行时间,目前第一个任务5分钟左右,中间三个任务分别为30分钟,40分钟,50分钟,第三个任务5分钟左右,共60分钟。
注意:这个解决方案优化的不是很多,随着复合指标增加,时长依旧会延长,目前没有好的方式避免,之前试过with的方式,近50个with会导致资源不足,跑不下去,如果后面再长,需要去找更好的方式