in fe/src/main/java/org/apache/impala/catalog/BuiltinsDb.java [979:1781]
private void initAggregateBuiltins() {
final String prefix = "_ZN6impala18AggregateFunctions";
final String initNullString = prefix +
"14InitNullStringEPN10impala_udf15FunctionContextEPNS1_9StringValE";
final String initNull = prefix +
"8InitNullEPN10impala_udf15FunctionContextEPNS1_6AnyValE";
final String stringValSerializeOrFinalize = prefix +
"28StringValSerializeOrFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE";
final String stringValGetValue = prefix +
"17StringValGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE";
Db db = this;
// Count (*)
db.addBuiltin(AggregateFunction.createBuiltin(db, "count",
new ArrayList<>(), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "15CountStarUpdateEPN10impala_udf15FunctionContextEPNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null,
prefix + "15CountStarRemoveEPN10impala_udf15FunctionContextEPNS1_9BigIntValE",
null, false, true, true));
for (Type t: Type.getSupportedTypes()) {
if (t.isNull()) continue; // NULL is handled through type promotion.
if (t.isScalarType(PrimitiveType.CHAR)) continue; // promoted to STRING
if (t.isScalarType(PrimitiveType.VARCHAR)) continue; // promoted to STRING
// Count
db.addBuiltin(AggregateFunction.createBuiltin(db, "count",
Lists.newArrayList(t), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "11CountUpdateEPN10impala_udf15FunctionContextERKNS1_6AnyValEPNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null,
prefix + "11CountRemoveEPN10impala_udf15FunctionContextERKNS1_6AnyValEPNS1_9BigIntValE",
null, false, true, true));
// Min
String minMaxInit = t.isStringType() ? initNullString : initNull;
String minMaxSerializeOrFinalize = t.isStringType() ?
stringValSerializeOrFinalize : null;
String minMaxGetValue = t.isStringType() ? stringValGetValue : null;
db.addBuiltin(AggregateFunction.createBuiltin(db, "min",
Lists.newArrayList(t), t, t, minMaxInit,
prefix + MIN_UPDATE_SYMBOL.get(t),
prefix + MIN_UPDATE_SYMBOL.get(t),
minMaxSerializeOrFinalize, minMaxGetValue,
null, minMaxSerializeOrFinalize, true, true, false));
// Max
db.addBuiltin(AggregateFunction.createBuiltin(db, "max",
Lists.newArrayList(t), t, t, minMaxInit,
prefix + MAX_UPDATE_SYMBOL.get(t),
prefix + MAX_UPDATE_SYMBOL.get(t),
minMaxSerializeOrFinalize, minMaxGetValue,
null, minMaxSerializeOrFinalize, true, true, false));
}
for (Type t: Type.getSupportedTypes()) {
if (t.isNull()) continue; // NULL is handled through type promotion.
if (t.isScalarType(PrimitiveType.CHAR)) continue; // promoted to STRING
if (t.isScalarType(PrimitiveType.VARCHAR)) continue; // promoted to STRING
if (t.isBinary()) continue; // Only supported for count/min/max
// Sample
db.addBuiltin(AggregateFunction.createBuiltin(db, "sample",
Lists.newArrayList(t), Type.STRING, Type.STRING,
prefix + SAMPLE_INIT_SYMBOL.get(t),
prefix + SAMPLE_UPDATE_SYMBOL.get(t),
prefix + SAMPLE_MERGE_SYMBOL.get(t),
prefix + SAMPLE_SERIALIZE_SYMBOL.get(t),
prefix + SAMPLE_FINALIZE_SYMBOL.get(t),
false, false, true));
// Approximate median
db.addBuiltin(AggregateFunction.createBuiltin(db, "appx_median",
Lists.newArrayList(t), t, Type.STRING,
prefix + SAMPLE_INIT_SYMBOL.get(t),
prefix + SAMPLE_UPDATE_SYMBOL.get(t),
prefix + SAMPLE_MERGE_SYMBOL.get(t),
prefix + SAMPLE_SERIALIZE_SYMBOL.get(t),
prefix + APPX_MEDIAN_FINALIZE_SYMBOL.get(t),
false, false, true));
// Histogram
db.addBuiltin(AggregateFunction.createBuiltin(db, "histogram",
Lists.newArrayList(t), Type.STRING, Type.STRING,
prefix + SAMPLE_INIT_SYMBOL.get(t),
prefix + SAMPLE_UPDATE_SYMBOL.get(t),
prefix + SAMPLE_MERGE_SYMBOL.get(t),
prefix + SAMPLE_SERIALIZE_SYMBOL.get(t),
prefix + HISTOGRAM_FINALIZE_SYMBOL.get(t),
false, false, true));
// NDV
// Setup the intermediate type based on the default precision in the template
// function in the db. This type is useful when the default precision is all
// needed in the ndv().
Type defaultHllIntermediateType =
ScalarType.createFixedUdaIntermediateType(HLL_INTERMEDIATE_SIZE);
// Single input argument version
db.addBuiltin(AggregateFunction.createBuiltin(db, "ndv", Lists.newArrayList(t),
Type.BIGINT, defaultHllIntermediateType,
prefix + "7HllInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + HLL_UPDATE_SYMBOL.get(t),
prefix + "8HllMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "11HllFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
// Double input argument version, with the unique HllUpdate function symbols.
// Take an intermediate data type with the default length for now. During the
// analysis phase, the data type will be resolved to the correct template, based
// on the the value in the 2nd argument.
db.addBuiltin(createTemplateAggregateFunctionForNDVWith2Args(
db, prefix, t, defaultHllIntermediateType));
// For each type t, populate the hash map of AggregateFunctions with
// all known intermediate data types.
List<AggregateFunction> ndvList = new ArrayList<AggregateFunction>();
for (int size : hll_intermediate_sizes) {
Type hllIntermediateType = ScalarType.createFixedUdaIntermediateType(size);
ndvList.add(createTemplateAggregateFunctionForNDVWith2Args(
db, prefix, t, hllIntermediateType));
}
builtinNDVs_.put(t, ndvList);
// Used in stats computation. Will take a single input argument only.
db.addBuiltin(AggregateFunction.createBuiltin(db, "ndv_no_finalize",
Lists.newArrayList(t), Type.STRING, defaultHllIntermediateType,
prefix + "7HllInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + HLL_UPDATE_SYMBOL.get(t),
prefix + "8HllMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
"_Z20IncrementNdvFinalizePN10impala_udf15FunctionContextERKNS_9StringValE",
true, false, true));
// DataSketches HLL
if (DS_HLL_UPDATE_SYMBOL.containsKey(t)) {
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_hll_sketch_and_estimate",
Lists.newArrayList(t), Type.BIGINT, Type.STRING,
prefix + "9DsHllInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + DS_HLL_UPDATE_SYMBOL.get(t),
prefix + "10DsHllMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "14DsHllSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "13DsHllFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_hll_sketch",
Lists.newArrayList(t), Type.STRING, Type.STRING,
prefix + "9DsHllInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + DS_HLL_UPDATE_SYMBOL.get(t),
prefix + "10DsHllMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "14DsHllSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "19DsHllFinalizeSketchEPN10impala_udf15FunctionContextERKNS1_" +
"9StringValE", true, false, true));
} else {
db.addBuiltin(AggregateFunction.createUnsupportedBuiltin(db,
"ds_hll_sketch_and_estimate", Lists.newArrayList(t), Type.STRING,
Type.STRING));
db.addBuiltin(AggregateFunction.createUnsupportedBuiltin(db, "ds_hll_sketch",
Lists.newArrayList(t), Type.STRING, Type.STRING));
}
// DataSketches CPC
if (DS_CPC_UPDATE_SYMBOL.containsKey(t)) {
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_cpc_sketch_and_estimate",
Lists.newArrayList(t), Type.BIGINT, Type.STRING,
prefix + "9DsCpcInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + DS_CPC_UPDATE_SYMBOL.get(t),
prefix + "10DsCpcMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "14DsCpcSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "13DsCpcFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_cpc_sketch",
Lists.newArrayList(t), Type.STRING, Type.STRING,
prefix + "9DsCpcInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + DS_CPC_UPDATE_SYMBOL.get(t),
prefix + "10DsCpcMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "14DsCpcSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "19DsCpcFinalizeSketchEPN10impala_udf15FunctionContextERKNS1_" +
"9StringValE", true, false, true));
} else {
db.addBuiltin(AggregateFunction.createUnsupportedBuiltin(db,
"ds_cpc_sketch_and_estimate", Lists.newArrayList(t), Type.STRING,
Type.STRING));
db.addBuiltin(AggregateFunction.createUnsupportedBuiltin(db, "ds_cpc_sketch",
Lists.newArrayList(t), Type.STRING, Type.STRING));
}
// DataSketches Theta
if (DS_THETA_UPDATE_SYMBOL.containsKey(t)) {
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_theta_sketch_and_estimate",
Lists.newArrayList(t), Type.BIGINT, Type.STRING,
prefix + "11DsThetaInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + DS_THETA_UPDATE_SYMBOL.get(t),
prefix + "12DsThetaMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "16DsThetaSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "15DsThetaFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_theta_sketch",
Lists.newArrayList(t), Type.STRING, Type.STRING,
prefix + "11DsThetaInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + DS_THETA_UPDATE_SYMBOL.get(t),
prefix + "12DsThetaMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "16DsThetaSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "21DsThetaFinalizeSketchEPN10impala_udf15FunctionContextERKNS1_" +
"9StringValE", true, false, true));
} else {
db.addBuiltin(AggregateFunction.createUnsupportedBuiltin(db,
"ds_theta_sketch_and_estimate", Lists.newArrayList(t), Type.STRING,
Type.STRING));
db.addBuiltin(AggregateFunction.createUnsupportedBuiltin(db, "ds_theta_sketch",
Lists.newArrayList(t), Type.STRING, Type.STRING));
}
// SAMPLED_NDV.
// Size needs to be kept in sync with SampledNdvState in the BE.
int NUM_HLL_BUCKETS = 32;
int size = 16 + NUM_HLL_BUCKETS * (8 + HLL_INTERMEDIATE_SIZE);
Type sampledIntermediateType = ScalarType.createFixedUdaIntermediateType(size);
db.addBuiltin(AggregateFunction.createBuiltin(db, "sampled_ndv",
Lists.newArrayList(t, Type.DOUBLE), Type.BIGINT, sampledIntermediateType,
prefix + "14SampledNdvInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + SAMPLED_NDV_UPDATE_SYMBOL.get(t),
prefix + "15SampledNdvMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "18SampledNdvFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
db.addBuiltin(AggregateFunction.createBuiltin(db, "aggif",
Lists.newArrayList(ScalarType.BOOLEAN, t), t, t,
initNull,
prefix + AGGIF_UPDATE_SYMBOL.get(t),
prefix + AGGIF_MERGE_SYMBOL.get(t),
null,
prefix + AGGIF_FINALIZE_SYMBOL.get(t),
true, false, true));
Type pcIntermediateType =
ScalarType.createFixedUdaIntermediateType(PC_INTERMEDIATE_SIZE);
// distinctpc
db.addBuiltin(AggregateFunction.createBuiltin(db, "distinctpc",
Lists.newArrayList(t), Type.BIGINT, pcIntermediateType,
prefix + "6PcInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + PC_UPDATE_SYMBOL.get(t),
prefix + "7PcMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "10PcFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, true));
// distinctpcsa
db.addBuiltin(AggregateFunction.createBuiltin(db, "distinctpcsa",
Lists.newArrayList(t), Type.BIGINT, pcIntermediateType,
prefix + "6PcInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + PCSA_UPDATE_SYMBOL.get(t),
prefix + "7PcMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "12PcsaFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, true));
if (STDDEV_UPDATE_SYMBOL.containsKey(t)) {
Type stddevIntermediateType =
ScalarType.createFixedUdaIntermediateType(STDDEV_INTERMEDIATE_SIZE);
db.addBuiltin(AggregateFunction.createBuiltin(db, "stddev",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthStddevFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "stddev_samp",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthStddevFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "stddev_pop",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "22KnuthStddevPopFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "variance",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "16KnuthVarFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "variance_samp",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "16KnuthVarFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "var_samp",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "16KnuthVarFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "variance_pop",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthVarPopFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "var_pop",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthVarPopFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
}
}
// Sum
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum",
Lists.<Type>newArrayList(Type.BIGINT), Type.BIGINT, Type.BIGINT, initNull,
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, null,
prefix + "9SumRemoveIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum",
Lists.<Type>newArrayList(Type.DOUBLE), Type.DOUBLE, Type.DOUBLE, initNull,
prefix + "9SumUpdateIN10impala_udf9DoubleValES3_EEvPNS2_15FunctionContextERKT_PT0_",
prefix + "9SumUpdateIN10impala_udf9DoubleValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, null,
prefix + "9SumRemoveIN10impala_udf9DoubleValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum",
Lists.<Type>newArrayList(Type.DECIMAL), Type.DECIMAL, Type.DECIMAL, initNull,
prefix + "16SumDecimalUpdateEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPS4_",
prefix + "15SumDecimalMergeEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPS4_",
null, null,
prefix + "16SumDecimalRemoveEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPS4_",
null, false, true, false));
// Sum that returns zero on an empty input.
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum_init_zero",
Lists.<Type>newArrayList(Type.BIGINT), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, null,
prefix + "9SumRemoveIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, false, true, true));
// Corr()
db.addBuiltin(AggregateFunction.createBuiltin(db, "corr",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.STRING,
prefix + "8CorrInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "10CorrUpdateEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "9CorrMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "12CorrGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "10CorrRemoveEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "12CorrFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "corr",
Lists.<Type>newArrayList(Type.TIMESTAMP, Type.TIMESTAMP), Type.DOUBLE, Type.STRING,
prefix + "8CorrInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"19TimestampCorrUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "9CorrMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "12CorrGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"19TimestampCorrRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "12CorrFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Regr_count()
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_count",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "15RegrCountUpdateEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null,
prefix + "15RegrCountRemoveEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9BigIntValE",
null, false, true, true));
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_count",
Lists.<Type>newArrayList(Type.TIMESTAMP, Type.TIMESTAMP), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "24TimestampRegrCountUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null,
prefix + "24TimestampRegrCountRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9BigIntValE",
null, false, true, true));
// Regr_r2()
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_r2",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.STRING,
prefix + "8CorrInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "10CorrUpdateEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "9CorrMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "15Regr_r2GetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "10CorrRemoveEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "15Regr_r2FinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_r2",
Lists.<Type>newArrayList(Type.TIMESTAMP, Type.TIMESTAMP), Type.DOUBLE, Type.STRING,
prefix + "8CorrInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"19TimestampCorrUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "9CorrMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "15Regr_r2GetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"19TimestampCorrRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "15Regr_r2FinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
//Regr_slope()
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_slope",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.STRING,
prefix + "13RegrSlopeInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "15RegrSlopeUpdateEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "14RegrSlopeMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "17RegrSlopeGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "15RegrSlopeRemoveEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "17RegrSlopeFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_slope",
Lists.<Type>newArrayList(Type.TIMESTAMP, Type.TIMESTAMP), Type.DOUBLE, Type.STRING,
prefix + "13RegrSlopeInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "24TimestampRegrSlopeUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "14RegrSlopeMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "17RegrSlopeGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "24TimestampRegrSlopeRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "17RegrSlopeFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Regr_intercept()
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_intercept",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.STRING,
prefix + "13RegrSlopeInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "15RegrSlopeUpdateEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "14RegrSlopeMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "21RegrInterceptGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "15RegrSlopeRemoveEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "21RegrInterceptFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "regr_intercept",
Lists.<Type>newArrayList(Type.TIMESTAMP, Type.TIMESTAMP), Type.DOUBLE, Type.STRING,
prefix + "13RegrSlopeInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "24TimestampRegrSlopeUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "14RegrSlopeMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "21RegrInterceptGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "24TimestampRegrSlopeRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "21RegrInterceptFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Covar_samp()
db.addBuiltin(AggregateFunction.createBuiltin(db, "covar_samp",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.STRING,
prefix + "9CovarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "11CovarUpdateEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "10CovarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "19CovarSampleGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "11CovarRemoveEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "19CovarSampleFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "covar_samp",
Lists.<Type>newArrayList(Type.TIMESTAMP, Type.TIMESTAMP), Type.DOUBLE, Type.STRING,
prefix + "9CovarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"20TimestampCovarUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "10CovarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "19CovarSampleGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"20TimestampCovarRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "19CovarSampleFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Covar_pop()
db.addBuiltin(AggregateFunction.createBuiltin(db, "covar_pop",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.STRING,
prefix + "9CovarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "11CovarUpdateEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "10CovarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "23CovarPopulationGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "11CovarRemoveEPN10impala_udf15FunctionContextERKNS1_9DoubleValES6_PNS1_9StringValE",
prefix + "23CovarPopulationFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "covar_pop",
Lists.<Type>newArrayList(Type.TIMESTAMP, Type.TIMESTAMP), Type.DOUBLE, Type.STRING,
prefix + "9CovarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"20TimestampCovarUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "10CovarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix + "23CovarPopulationGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"20TimestampCovarRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValES6_PNS1_9StringValE",
prefix + "23CovarPopulationFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Avg
Type avgIntermediateType =
ScalarType.createFixedUdaIntermediateType(AVG_INTERMEDIATE_SIZE);
Type decimalAvgIntermediateType =
ScalarType.createFixedUdaIntermediateType(DECIMAL_AVG_INTERMEDIATE_SIZE);
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.BIGINT), Type.DOUBLE, avgIntermediateType,
prefix + "7AvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "9AvgUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "8AvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "11AvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "9AvgRemoveIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "11AvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.DOUBLE), Type.DOUBLE, avgIntermediateType,
prefix + "7AvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "9AvgUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "8AvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "11AvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "9AvgRemoveIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "11AvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.DECIMAL), Type.DECIMAL, decimalAvgIntermediateType,
prefix + "14DecimalAvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "16DecimalAvgUpdateEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPNS1_9StringValE",
prefix + "15DecimalAvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "18DecimalAvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "16DecimalAvgRemoveEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPNS1_9StringValE",
prefix + "18DecimalAvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Avg(Timestamp)
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.TIMESTAMP), Type.TIMESTAMP, avgIntermediateType,
prefix + "7AvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "18TimestampAvgUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValEPNS1_9StringValE",
prefix + "8AvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "20TimestampAvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "18TimestampAvgRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValEPNS1_9StringValE",
prefix + "20TimestampAvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Group_concat(string)
db.addBuiltin(AggregateFunction.createBuiltin(db, "group_concat",
Lists.<Type>newArrayList(Type.STRING), Type.STRING, Type.STRING, initNullString,
prefix +
"18StringConcatUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"17StringConcatMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix +
"20StringConcatFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
// Group_concat(string, string)
db.addBuiltin(AggregateFunction.createBuiltin(db, "group_concat",
Lists.<Type>newArrayList(Type.STRING, Type.STRING), Type.STRING, Type.STRING,
initNullString,
prefix +
"18StringConcatUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValES6_PS4_",
prefix +
"17StringConcatMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix +
"20StringConcatFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
// analytic functions
// Rank
Type rankIntermediateType =
ScalarType.createFixedUdaIntermediateType(RANK_INTERMEDIATE_SIZE);
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(db, "rank",
Lists.<Type>newArrayList(), Type.BIGINT, rankIntermediateType,
prefix + "8RankInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "10RankUpdateEPN10impala_udf15FunctionContextEPNS1_9StringValE",
null,
prefix + "12RankGetValueEPN10impala_udf15FunctionContextERNS1_9StringValE",
prefix + "12RankFinalizeEPN10impala_udf15FunctionContextERNS1_9StringValE"));
// Dense rank
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(db, "dense_rank",
Lists.<Type>newArrayList(), Type.BIGINT, rankIntermediateType,
prefix + "8RankInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "15DenseRankUpdateEPN10impala_udf15FunctionContextEPNS1_9StringValE",
null,
prefix + "17DenseRankGetValueEPN10impala_udf15FunctionContextERNS1_9StringValE",
prefix + "12RankFinalizeEPN10impala_udf15FunctionContextERNS1_9StringValE"));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "row_number", new ArrayList<Type>(), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "15CountStarUpdateEPN10impala_udf15FunctionContextEPNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null));
// DataSketches HLL sketch
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_kll_sketch",
Lists.<Type>newArrayList(Type.FLOAT), Type.STRING, Type.STRING,
prefix + "9DsKllInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "11DsKllUpdateEPN10impala_udf15FunctionContextERKNS1_8FloatValEPNS1_" +
"9StringValE",
prefix + "10DsKllMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "14DsKllSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "19DsKllFinalizeSketchEPN10impala_udf15FunctionContextERKNS1_" +
"9StringValE", true, false, true));
// DataSketches KLL union
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_kll_union",
Lists.<Type>newArrayList(Type.STRING), Type.STRING, Type.STRING,
prefix + "14DsKllUnionInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"16DsKllUnionUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"15DsKllUnionMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"19DsKllUnionSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"18DsKllUnionFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
// The following 3 functions are never directly executed because they get rewritten
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "percent_rank", Lists.<Type>newArrayList(), Type.DOUBLE, Type.STRING));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "cume_dist", Lists.<Type>newArrayList(), Type.DOUBLE, Type.STRING));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "ntile", Lists.<Type>newArrayList(Type.BIGINT), Type.BIGINT, Type.STRING));
// DataSketches HLL union
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_hll_union",
Lists.<Type>newArrayList(Type.STRING), Type.STRING, Type.STRING,
prefix + "14DsHllUnionInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"16DsHllUnionUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"15DsHllUnionMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"19DsHllUnionSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"18DsHllUnionFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
// DataSketches CPC union
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_cpc_union",
Lists.<Type>newArrayList(Type.STRING), Type.STRING, Type.STRING,
prefix + "14DsCpcUnionInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"16DsCpcUnionUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"15DsCpcUnionMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"19DsCpcUnionSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"18DsCpcUnionFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
// DataSketches Theta union
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_theta_union",
Lists.<Type>newArrayList(Type.STRING), Type.STRING, Type.STRING,
prefix + "16DsThetaUnionInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"18DsThetaUnionUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"17DsThetaUnionMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"21DsThetaUnionSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"20DsThetaUnionFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
// DataSketches Theta intersect
db.addBuiltin(AggregateFunction.createBuiltin(db, "ds_theta_intersect",
Lists.<Type>newArrayList(Type.STRING), Type.STRING, Type.STRING,
prefix + "20DsThetaIntersectInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix +
"22DsThetaIntersectUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"21DsThetaIntersectMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"25DsThetaIntersectSerializeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix +
"24DsThetaIntersectFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
for (Type t: Type.getSupportedTypes()) {
if (t.isNull()) continue; // NULL is handled through type promotion.
if (t.isScalarType(PrimitiveType.CHAR)) continue; // promoted to STRING
if (t.isScalarType(PrimitiveType.VARCHAR)) continue; // promoted to STRING
// BINARY is not supported for analytic functions.
if (t.isBinary()) continue;
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "first_value", Lists.newArrayList(t), t, t,
t.isStringType() ? initNullString : initNull,
prefix + FIRST_VALUE_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
// Implements FIRST_VALUE for some windows that require rewrites during planning.
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "first_value_rewrite", Lists.newArrayList(t, Type.BIGINT), t, t,
t.isStringType() ? initNullString : initNull,
prefix + FIRST_VALUE_REWRITE_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null,
false));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "first_value_ignore_nulls", Lists.newArrayList(t), t, t,
t.isStringType() ? initNullString : initNull,
prefix + FIRST_VALUE_IGNORE_NULLS_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null,
false));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "last_value", Lists.newArrayList(t), t, t,
t.isStringType() ? initNullString : initNull,
prefix + UPDATE_VAL_SYMBOL.get(t),
prefix + LAST_VALUE_REMOVE_SYMBOL.get(t),
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "last_value_ignore_nulls", Lists.newArrayList(t), t, Type.STRING,
prefix + LAST_VALUE_IGNORE_NULLS_INIT_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_UPDATE_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_REMOVE_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_GET_VALUE_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_FINALIZE_SYMBOL.get(t),
false));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lag", Lists.newArrayList(t, Type.BIGINT, t), t, t,
prefix + OFFSET_FN_INIT_SYMBOL.get(t),
prefix + OFFSET_FN_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lead", Lists.newArrayList(t, Type.BIGINT, t), t, t,
prefix + OFFSET_FN_INIT_SYMBOL.get(t),
prefix + OFFSET_FN_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
// lead() and lag() the default offset and the default value should be
// rewritten to call the overrides that take all parameters.
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lag", Lists.newArrayList(t), t, t));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lag", Lists.newArrayList(t, Type.BIGINT), t, t));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lead", Lists.newArrayList(t), t, t));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lead", Lists.newArrayList(t, Type.BIGINT), t, t));
}
// Grouping ID functions for grouping sets. These are rewritten during analysis.
db.addBuiltin(AggregateFunction.createRewrittenBuiltin(db, "grouping_id",
Collections.<Type>emptyList(), Type.BIGINT, /*ignoresDistinct=*/ true,
/*isAnalyticFn=*/ false, /*returnsNonNullOnEmpty=*/ true));
// grouping() can take any grouping expression as input.
for (Type t: Type.getSupportedTypes()) {
db.addBuiltin(AggregateFunction.createRewrittenBuiltin(db, "grouping",
Lists.newArrayList(t), Type.TINYINT, /*ignoresDistinct=*/ true,
/*isAnalyticFn=*/ false, /*returnsNonNullOnEmpty=*/ true));
}
}