Hi, I created two issues for two distinct bugs in AggregateUnionTransposeRule:
1. https://issues.apache.org/jira/browse/CALCITE-4616 - the problem with a partial Aggregate push-down 2. https://issues.apache.org/jira/browse/CALCITE-4615 - the problem with an incorrect type of aggregate call (not discussed in this thread before) Regarding issue 1, my proposal is to remove the partial pushdown optimization completely. We may do the following: 1. Iterate over all inputs, and check if they have a unique key on the Aggregate's group key. 2. If all inputs are unique, return as there is no sense to push the Aggregate past Union. 3. If at least one input is not unique, push aggregate to *all* inputs, to maintain the proper row type, assuming that the AggregateRemoveRule will eventually remove unnecessary aggregations. Regards, Vladimir. пт, 21 мая 2021 г. в 09:43, JiaTao Tao <[email protected]>: > Sounds make sense > > Regards! > > Aron Tao > > > Vladimir Ozerov <[email protected]> 于2021年5月19日周三 下午8:57写道: > > > 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. > > >
