This is legal:
  select max(last_name)  from cp.`employee.json` group by last_name limit 5;
But this is not:
  select max(last_name) last_name from cp.`employee.json` group by
last_name limit 5;

The reason is the second query is aliasing the max() output to 'last_name'
which is being referenced in the group-by clause.  Referencing an aggregate
expr in the group-by is not allowed by SQL standards, hence Calcite (which
does the parsing and validation, not Drill) throws this error during
validation phase.  Detailed error stack is below.  I don't think this would
have worked in 1.13 either.  My guess is you may have run the first query
in 1.13 and that should still continue to work.

Validation error thrown by Calcite:

Caused By (org.apache.calcite.sql.validate.SqlValidatorException) Aggregate
expression is illegal in GROUP BY clause

    sun.reflect.NativeConstructorAccessorImpl.newInstance0():-2

    sun.reflect.NativeConstructorAccessorImpl.newInstance():62

    sun.reflect.DelegatingConstructorAccessorImpl.newInstance():45

    java.lang.reflect.Constructor.newInstance():423

    org.apache.calcite.runtime.Resources$ExInstWithCause.ex():463

    org.apache.calcite.runtime.Resources$ExInst.ex():572

    org.apache.calcite.sql.SqlUtil.newContextException():787

    org.apache.calcite.sql.SqlUtil.newContextException():772


org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError():4788


org.apache.calcite.sql.validate.SqlValidatorImpl.validateGroupClause():3941

    org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect():3306

    org.apache.calcite.sql.validate.SelectNamespace.validateImpl():60

    org.apache.calcite.sql.validate.AbstractNamespace.validate():84

    org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace():977

    org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery():953

    org.apache.calcite.sql.SqlSelect.validate():216


org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression():928

    org.apache.calcite.sql.validate.SqlValidatorImpl.validate():632

    org.apache.drill.exec.planner.sql.SqlConverter.validate():207

On Fri, Apr 19, 2019 at 12:39 PM Nitin Pawar <[email protected]>
wrote:

> I think the error is not with storage plugin but with query parsing
>
> here is the exception
> 0: jdbc:drill:zk=local> select max(last_name) last_name from
> cp.`employee.json` group by last_name limit 5;
> Error: VALIDATION ERROR: From line 1, column 8 to line 1, column 21:
> Aggregate expression is illegal in GROUP BY clause
>
> On Fri, Apr 19, 2019 at 11:57 PM Kunal Khatua <[email protected]> wrote:
>
> > (Replying on the Drill user list)
> >
> > This is odd. The CP storage plugin is inbuilt with Drill and that hasn't
> > changed. 1.15 by itself works fine.
> >
> > What is the error you are seeing, Nitin?
> >
> >
> > On 4/18/2019 10:58:48 PM, Nitin Pawar <[email protected]> wrote:
> > Hi,
> >
> > We are trying to upgrade drill from 1.13 to 1.15
> > following query works in drill 1.13 but not in 1.15
> >
> > select max(last_name) from cp.`employee.json` group by last_name limit 5
> >
> > can you let us know if this backward compatibility issue will be fixed ??
> >
> > --
> > Nitin Pawar
> >
>
>
> --
> Nitin Pawar
>

Reply via email to