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