[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:
Hao Tan
2021-08-18 15:56:06 +08:00
committed by GitHub
parent 9148bcb673
commit 66a7a4b294
11 changed files with 534 additions and 0 deletions

View File

@ -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");

View File

@ -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",