flink版本是1.17
框架是flink on hive 执行sql任务:
一个sql,聚合过程的过程,包含多个count+sum过程;
但是,跑出来的结果值有时候为0,有时候正常!!
去掉其中部分count或者sum数据时,有时正常有时异常!
完整sql:
create table test.20230827_tmp9 as
select
countryid,
r_type,
c_type,
c_version,
count(distinct uid) user_cnt,
count(distinct did) dev_cnt,
count(distinct concat(did,cn)) channel_cnt,
count(distinct hc) hc_cnt,
count(1) all_cnt,
count(case when r not in (-1,-2,21,20084,25404,25409,25416,25451,25544,25546,26109,10053,10057,10121,10122,10125,10127) then 1 end) all_cnt_qu,
count(case when r = 0 then 1 end) success_cnt,
count(case when r = 0 and ft between 0 and 30000 then 1 end) success_cnt2,
sum(case when r = 0 and ft between 0 and 30000 then flowtbt else 0 end) flowtbt,
sum(case when r = 0 and ft between 0 and 30000 then flowtht else 0 end) flowtht,
sum(case when r = 0 and ft between 0 and 30000 then flowtot else 0 end) flowtot,
sum(case when r = 0 and ft between 0 and 30000 then decodet else 0 end) decodet,
sum(case when r = 0 and ft between 0 and 30000 then ft else 0 end) flowt,
sum(case when r = 0 and ft between 0 and 30000 then viewt else 0 end) viewt
from temp_table
where pdt = '2023-08-17'
group by
country_id,
r_type,
c_type,
c_version;
此时执行结果异常,从all_cnt字段开始,所有结果都是0;
正常sql(异常sql中去掉c_version字段到all_cnt之间几个count过程):
create table test.20230827_tmp9 as
select
countryid,
r_type,
c_type,
c_version,
count(1) all_cnt,
count(case when r not in (-1,-2,21,20084,25404,25409,25416,25451,25544,25546,26109,10053,10057,10121,10122,10125,10127) then 1 end) all_cnt_qu,
count(case when r = 0 then 1 end) success_cnt,
count(case when r = 0 and ft between 0 and 30000 then 1 end) success_cnt2,
sum(case when r = 0 and ft between 0 and 30000 then flowtbt else 0 end) flowtbt,
sum(case when r = 0 and ft between 0 and 30000 then flowtht else 0 end) flowtht,
sum(case when r = 0 and ft between 0 and 30000 then flowtot else 0 end) flowtot,
sum(case when r = 0 and ft between 0 and 30000 then decodet else 0 end) decodet,
sum(case when r = 0 and ft between 0 and 30000 then ft else 0 end) flowt,
sum(case when r = 0 and ft between 0 and 30000 then viewt else 0 end) viewt
from temp_table
where pdt = '2023-08-17'
group by
country_id,
r_type,
c_type,
c_version;
此时结果,所有字段都是正常的!!!
此情况,在其他日期分区时,没有发生,当前运行只发生2天,但是一次的偶然意外,让我们对整体方案产生怀疑,是否可用于线上生产。。。。
想问问社区大神,这是什么问题引起的!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
感谢叶师傅的答复! 这些因素我们也在排查问题是进行过校验和排除: 1.关于数据质量问题,提供的两个sql语句,使用的是同一份数据,不同的只是第一个sql多4个count聚合,包过聚合条件和过滤条件均一致;所以我们排除数据重复问题、数据缺失问题;额外补充一点,第一个sql用flinksql执行出来结果异常,但是用sparksql执行出来的结果是正常的; 2.关于sql语句问题,第一个执行出现异常的sql,在发生异常以前,执行结果都是正常; 3.关于执行流程和系统配置问题:两个语句都是在同一个工具中,提交到同一个环境执行生成,提交时的配置项都一致;
我们当前判断是当天的某一个数据,触发了某个flink的bug,导致返回异常的情况; 但当前我们无法排查出这个数据内容; 查看flink的执行日志,也没有发现报错情况。
这种问题非常诡异,可能涉及到多个方面的因素,包括数据本身的质量、SQL语句的编写、执行流程、系统配置等等。根据你提供的信息,我可以提供以下几点建议:
数据质量:检查数据中是否存在重复、缺失、异常等问题,这些问题可能会导致聚合结果不准确或者出现0值。
SQL语句:检查SQL语句的编写是否正确,特别是聚合函数和条件语句的使用是否合理。如果SQL语句存在问题,可以尝试优化或者修改SQL语句。
执行流程:检查执行流程中是否存在问题,例如数据倾斜、任务超时、资源不足等问题。这些问题可能会导致聚合结果不准确或者出现0值。
系统配置:检查系统配置是否正确,例如数据源、目标表、SQL执行节点等配置。如果系统配置存在问题,可以尝试调整或者优化配置。
总之,要解决这种问题,需要对数据、SQL语句、执行流程和系统配置进行全面的排查和分析,找到问题的根本原因,并采取相应的措施进行解决。同时,建议在生产环境中进行充分的测试和验证,确保方案的可靠性和稳定性。