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.