thanks!!! it works
At 2020-10-27 15:30:57, "Danny Chan" <[email protected]> wrote: >Your "aggr" needs to implement the interface SqlAggFunction ><https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/SqlAggFunction.java> >. > >dawangli <[email protected]> 于2020年10月27日周二 下午3:24写道: > >> sorry, i means udaf >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> At 2020-10-27 15:21:36, "Danny Chan" <[email protected]> wrote: >> >Do you mean DUTF or UDAF ? >> > >> >dawangli <[email protected]> 于2020年10月27日周二 上午11:35写道: >> > >> >> I hive the following code,it just valid a simple group by sql with a >> udaf, >> >> but i doesn't work, it seems like the calcite cannot identify the aggr >> udaf >> >> ,code and error displayed below >> >> code >> >> String sql = "SELECT\n" + >> >> " dim,\n" + >> >> " aggr(val)\n" + >> >> "FROM\n" + >> >> " tb\n" + >> >> "GROUP BY\n" + >> >> " dim"; >> >> >> >> CalciteSchema rootSchema = CalciteSchema >> >> .createRootSchema(false, false); >> >> >> >> rootSchema.add("tb", new AbstractTable() { //note: add a table >> >> @Override >> >> public RelDataType getRowType(final RelDataTypeFactory typeFactory) { >> >> RelDataTypeFactory.Builder builder = typeFactory.builder(); >> >> >> >> builder.add("dim", new BasicSqlType(new RelDataTypeSystemImpl() {}, >> >> SqlTypeName.VARCHAR)); >> >> builder.add("val", new BasicSqlType(new RelDataTypeSystemImpl() {}, >> >> SqlTypeName.BIGINT)); >> >> return builder.build(); >> >> } >> >> }); >> >> >> >> SqlParser.ConfigBuilder builder = SqlParser.configBuilder(); >> >> builder.setQuotedCasing(Casing.TO_UPPER); >> >> builder.setUnquotedCasing(Casing.TO_UPPER); >> >> builder.setCaseSensitive(false); >> >> builder.setLex(Lex.JAVA); >> >> SqlStdOperatorTable sqlStdOperatorTable = >> SqlStdOperatorTable.instance(); >> >> >> >> sqlStdOperatorTable.register(new SqlFunction( >> >> new SqlIdentifier("aggr", SqlParserPos.ZERO), >> >> ReturnTypes.cascade(ReturnTypes.explicit(SqlTypeName.ANY), >> >> SqlTypeTransforms.TO_NULLABLE), >> >> null, >> >> OperandTypes.family(SqlTypeFamily.ANY), >> >> Lists.newArrayList(new >> >> >> SqlTypeFactoryImpl(RelDataTypeSystem.DEFAULT).createSqlType(SqlTypeName.ANY)), >> >> SqlFunctionCategory.USER_DEFINED_FUNCTION)); >> >> >> >> final FrameworkConfig config = Frameworks.newConfigBuilder() >> >> .defaultSchema(rootSchema.plus()) >> >> .parserConfig(builder.build()) >> >> .operatorTable(sqlStdOperatorTable) >> >> .build(); >> >> Planner planner = Frameworks.getPlanner(config); >> >> >> >> SqlNode originSqlNode = planner.parse(sql); >> >> >> >> SqlNode sqlNode = planner.validate(originSqlNode); >> >> >> >> >> >> error: >> >> >> >> >> >> Exception in thread "main" org.apache.calcite.tools.ValidationException: >> >> org.apache.calcite.runtime.CalciteContextException: From line 3, column >> 8 >> >> to line 3, column 10: Expression 'val' is not being grouped >> >> at >> >> org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:217) >> >> at com.kuaishou.dp.stream.metadata.sql.Test.main(Test.java:422) >> >> Caused by: org.apache.calcite.runtime.CalciteContextException: From line >> >> 3, column 8 to line 3, column 10: Expression 'val' is not being grouped >> >> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native >> >> Method) >> >> at >> >> >> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) >> >> at >> >> >> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) >> >> at >> java.lang.reflect.Constructor.newInstance(Constructor.java:423) >> >> at >> >> >> org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) >> >> at >> >> org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:834) >> >> at >> >> org.apache.calcite.sql.SqlUtil.newContextException(SqlUtil.java:819) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.newValidationError(SqlValidatorImpl.java:4867) >> >> at >> >> org.apache.calcite.sql.validate.AggChecker.visit(AggChecker.java:113) >> >> at >> >> org.apache.calcite.sql.validate.AggChecker.visit(AggChecker.java:40) >> >> at >> >> org.apache.calcite.sql.SqlIdentifier.accept(SqlIdentifier.java:317) >> >> at >> >> >> org.apache.calcite.sql.util.SqlBasicVisitor$ArgHandlerImpl.visitChild(SqlBasicVisitor.java:123) >> >> at >> >> org.apache.calcite.sql.SqlOperator.acceptCall(SqlOperator.java:868) >> >> at >> >> org.apache.calcite.sql.validate.AggChecker.visit(AggChecker.java:212) >> >> at >> >> org.apache.calcite.sql.validate.AggChecker.visit(AggChecker.java:40) >> >> at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:139) >> >> at >> >> >> org.apache.calcite.sql.validate.AggregatingSelectScope.checkAggregateExpr(AggregatingSelectScope.java:228) >> >> at >> >> >> org.apache.calcite.sql.validate.AggregatingSelectScope.validateExpr(AggregatingSelectScope.java:237) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.validateExpr(SqlValidatorImpl.java:4162) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelectList(SqlValidatorImpl.java:4136) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.validateSelect(SqlValidatorImpl.java:3392) >> >> at >> >> >> org.apache.calcite.sql.validate.SelectNamespace.validateImpl(SelectNamespace.java:60) >> >> at >> >> >> org.apache.calcite.sql.validate.AbstractNamespace.validate(AbstractNamespace.java:84) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.validateNamespace(SqlValidatorImpl.java:1005) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.validateQuery(SqlValidatorImpl.java:965) >> >> at org.apache.calcite.sql.SqlSelect.validate(SqlSelect.java:216) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:940) >> >> at >> >> >> org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:647) >> >> at >> >> org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:215) >> >> ... 1 more >> >> Caused by: org.apache.calcite.sql.validate.SqlValidatorException: >> >> Expression 'val' is not being grouped >> >> at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native >> >> Method) >> >> at >> >> >> sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) >> >> at >> >> >> sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) >> >> at >> java.lang.reflect.Constructor.newInstance(Constructor.java:423) >> >> at >> >> >> org.apache.calcite.runtime.Resources$ExInstWithCause.ex(Resources.java:463) >> >> at >> >> org.apache.calcite.runtime.Resources$ExInst.ex(Resources.java:572) >> >> ... 25 more >> >> >> >> >> >> >> >> >> >> >> >> >>
