You have definitely found a bug. One solution is to remove some of the rule’s 
responsibilities - delegating to another rule that presumably doesn’t have the 
bug. That would be a breaking change.  Another solution is to fix the rule. 

Please log a jira case, and let’s discuss further there. 

Reading the code, I noticed that it only pushes down if the UNION has ALL. I 
think it could push down through a UNION DISTINCT if there are no aggregate 
functions. Let’s consider that as an enhancement.

Julian

> On May 19, 2021, at 5:57 AM, Vladimir Ozerov <ppoze...@gmail.com> wrote:
> 
> Hi,
> 
> The AggregateUnionTransposeRule attempts to push the Aggregate below the
> Union.
> 
> Before:
> Aggregate[group=$0, agg=SUM($1]
>  Union[all]
>    Input1
>    Input2
> 
> After:
> Aggregate[group=$0, agg=SUM($1]
>  Union[all]
>    Aggregate[group=$0, agg=SUM($1]
>      Input1
>    Aggregate[group=$0, agg=SUM($1]
>      Input2
> 
> When pushing the Aggregate, it checks whether the input is definitively
> unique on the grouping key. If yes, the Aggregate is not installed on top
> of the input, assuming that the result would be the same as without the
> Aggregate. This generates a type mismatch exception when aggregation is
> pushed only to some of the inputs:
> Aggregate[group=$0, agg=SUM($1]
>  Union[all]
>    Aggregate[group=$0, agg=SUM($1]
>      Input1
>    Input2
> 
> It seems that the uniqueness check should not be in that rule at all, and
> the aggregate should be pushed unconditionally. Motivation: we already have
> AggregateRemoveRule that removes unnecessary aggregates. No need to
> duplicate the same non-trivial logic twice.
> 
> Does the proposal make sense to you?
> 
> Regards,
> Vladimir.

Reply via email to