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
>>
>>
>>
>>
>>
>>

Reply via email to