[Feature] Support exact percentile aggregate function (#6410)
Support to calculate the exact percentile value array of numeric column `col` at the given percentage(s).
This commit is contained in:
@ -461,6 +461,16 @@ public class FunctionCallExpr extends Expr {
|
||||
fnParams.setIsDistinct(false);
|
||||
}
|
||||
|
||||
if (fnName.getFunction().equalsIgnoreCase("percentile")) {
|
||||
if (children.size() != 2) {
|
||||
throw new AnalysisException("percentile(expr, DOUBLE) requires two parameters");
|
||||
}
|
||||
if (!getChild(1).isConstant()) {
|
||||
throw new AnalysisException("percentile requires second parameter must be a constant : "
|
||||
+ this.toSql());
|
||||
}
|
||||
}
|
||||
|
||||
if (fnName.getFunction().equalsIgnoreCase("percentile_approx")) {
|
||||
if (children.size() != 2 && children.size() != 3) {
|
||||
throw new AnalysisException("percentile_approx(expr, DOUBLE [, B]) requires two or three parameters");
|
||||
|
||||
@ -1694,6 +1694,16 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
|
||||
"",
|
||||
"",
|
||||
true, false, true, true));
|
||||
|
||||
//Percentile
|
||||
addBuiltin(AggregateFunction.createBuiltin("percentile",
|
||||
Lists.newArrayList(Type.BIGINT, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
|
||||
prefix + "15percentile_initEPN9doris_udf15FunctionContextEPNS1_9StringValE",
|
||||
prefix + "17percentile_updateIN9doris_udf9BigIntValEEEvPNS2_15FunctionContextERKT_RKNS2_9DoubleValEPNS2_9StringValE",
|
||||
prefix + "16percentile_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_",
|
||||
prefix + "20percentile_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
|
||||
prefix + "19percentile_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
|
||||
false, false, false));
|
||||
|
||||
//PercentileApprox
|
||||
addBuiltin(AggregateFunction.createBuiltin("percentile_approx",
|
||||
|
||||
Reference in New Issue
Block a user