可以确认下 union all 之后的数据是不是根据 group by 的 key 相互覆盖的情况。

在 2020-11-05 13:24:20,"夜思流年梦" <[email protected]> 写道:
>
>
>
>
>
>
>
>
>
>flink 版本是1.11的版本了
>
>
>
>
>
>
>
>
>在 2020-11-05 00:02:12,"hailongwang" <[email protected]> 写道:
>>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') ;

回复