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