问题描述
我配置以下代码,它只对带有udaf的sql进行简单的分组有效,但是我不起作用,方解石无法识别aggr udaf
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",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);
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 10: Expression 'val' is not being grouped...
我应该如何正确地将aggr udaf注册到方解石?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)