Hi liaobiao,

你的 flink 版本是什么呢?
根据你的 SQL,如果是版本是 <= 1.10 的话,会根据 MetaDataHander 识别出你的 group by 后面的 key 作为 upsert 
key,这样就会产生覆盖的情况。
你看下结果是否是这种情况的?


Best,
Hailong Wang




在 2020-11-04 17:20:23,"夜思流年梦" <[email protected]> 写道:
>开发者好:
>               目前有此场景:算不同部门的总收入和所有部门的总收入,打算把两部分SQL union all  ,但是实际情况发现 union 
> all的时候会丢一部分数据,要么是各个部门的数据少了,要么是所有部门的总收入少了
>               如果把union  all 的两段SQL 分别独立出来,插入同一张表,那么数据就是正常的,不知道是否是bug还是使用方法不对
>
>
>
>
>原sql :
>
>
>insert into dws_XXXX
>
>
>select 
>0 as id
>,cast (DATE_FORMAT(LOCALTIMESTAMP, 'yyyyMMddHH') as bigint) as ftime
>,case 
>when dept_name like '%XX%' then 'X1'
>when dept_name = 'xXX' then 'X2'
>else 'X3' end as paytype
>,count(orderid) as paynum_h 
>,round(sum(amt)) as paymoney_h 
>from dwd_XXX
>where write_time >=DATE_FORMAT(LOCALTIMESTAMP, 'yyyy-MM-dd')
>group by
>DATE_FORMAT(LOCALTIMESTAMP, 'yyyyMMddHH'), 
>case 
>when dept_name like '%XX%' then 'X1'
>when dept_name = 'xXX' then 'X2'
>else 'X3' end ;
>
>
>
>
>union all
>
>
>
>
>select 0 as id
>,cast (DATE_FORMAT(LOCALTIMESTAMP, 'yyyyMMddHH') as int) as ftime
>,'all' as paytype
>,count(orderid) as paynum_h  
>,round(sum(amt)) as paymoney_h  
>from dwd_XXX
>where write_time >=DATE_FORMAT(LOCALTIMESTAMP, 'yyyy-MM-dd')
>group by DATE_FORMAT(LOCALTIMESTAMP, 'yyyyMMddHH') ;

回复