Can you add your proposed fix to the bug, and we can discuss there.

> On May 21, 2021, at 2:33 AM, Vladimir Ozerov <ppoze...@gmail.com> wrote:
> 
> 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 <taojia...@gmail.com>:
> 
>> Sounds  make sense
>> 
>> Regards!
>> 
>> Aron Tao
>> 
>> 
>> Vladimir Ozerov <ppoze...@gmail.com> 于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.
>>> 
>> 

Reply via email to