use of org.apache.flink.table.planner.functions.utils.HiveAggSqlFunction in project flink by apache.
the class HiveParserUtils method getGenericUDAFEvaluator.
// Returns the GenericUDAFEvaluator for the aggregation. This is called once for each GroupBy
// aggregation.
// TODO: Requiring a GenericUDAFEvaluator means we only support hive UDAFs. Need to avoid this
// to support flink UDAFs.
public static GenericUDAFEvaluator getGenericUDAFEvaluator(String aggName, ArrayList<ExprNodeDesc> aggParameters, HiveParserASTNode aggTree, boolean isDistinct, boolean isAllColumns, SqlOperatorTable opTable) throws SemanticException {
ArrayList<ObjectInspector> originalParameterTypeInfos = getWritableObjectInspector(aggParameters);
GenericUDAFEvaluator result = FunctionRegistry.getGenericUDAFEvaluator(aggName, originalParameterTypeInfos, isDistinct, isAllColumns);
if (result == null) {
// this happens for temp functions
SqlOperator sqlOperator = getSqlOperator(aggName, opTable, SqlFunctionCategory.USER_DEFINED_FUNCTION);
if (sqlOperator instanceof HiveAggSqlFunction) {
HiveGenericUDAF hiveGenericUDAF = (HiveGenericUDAF) ((HiveAggSqlFunction) sqlOperator).makeFunction(new Object[0], new LogicalType[0]);
result = hiveGenericUDAF.createEvaluator(originalParameterTypeInfos.toArray(new ObjectInspector[0]));
}
}
if (null == result) {
String reason = "Looking for UDAF Evaluator\"" + aggName + "\" with parameters " + originalParameterTypeInfos;
throw new SemanticException(HiveParserErrorMsg.getMsg(ErrorMsg.INVALID_FUNCTION_SIGNATURE, aggTree.getChild(0), reason));
}
return result;
}
use of org.apache.flink.table.planner.functions.utils.HiveAggSqlFunction in project flink by apache.
the class FunctionCatalogOperatorTable method convertToSqlFunction.
private Optional<SqlFunction> convertToSqlFunction(@Nullable SqlFunctionCategory category, ContextResolvedFunction resolvedFunction) {
final FunctionDefinition definition = resolvedFunction.getDefinition();
final FunctionIdentifier identifier = resolvedFunction.getIdentifier().orElse(null);
// legacy
if (definition instanceof AggregateFunctionDefinition) {
AggregateFunctionDefinition def = (AggregateFunctionDefinition) definition;
if (isHiveFunc(def.getAggregateFunction())) {
return Optional.of(new HiveAggSqlFunction(identifier, def.getAggregateFunction(), typeFactory));
} else {
return convertAggregateFunction(identifier, (AggregateFunctionDefinition) definition);
}
} else if (definition instanceof ScalarFunctionDefinition) {
ScalarFunctionDefinition def = (ScalarFunctionDefinition) definition;
return convertScalarFunction(identifier, def);
} else if (definition instanceof TableFunctionDefinition && category != null && category.isTableFunction()) {
TableFunctionDefinition def = (TableFunctionDefinition) definition;
if (isHiveFunc(def.getTableFunction())) {
DataType returnType = fromLegacyInfoToDataType(new GenericTypeInfo<>(Row.class));
return Optional.of(new HiveTableSqlFunction(identifier, def.getTableFunction(), returnType, typeFactory, new DeferredTypeFlinkTableFunction(def.getTableFunction(), returnType), HiveTableSqlFunction.operandTypeChecker(identifier.toString(), def.getTableFunction())));
} else {
return convertTableFunction(identifier, (TableFunctionDefinition) definition);
}
}
// new stack
return convertToBridgingSqlFunction(category, resolvedFunction);
}
Aggregations