You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/04/14 04:07:32 UTC
[incubator-doris] branch master updated: [Feature]support stddev/variance agg functions to window function (#8962)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 9ac6d23a44 [Feature]support stddev/variance agg functions to window function (#8962)
9ac6d23a44 is described below
commit 9ac6d23a443a9cd327fe94a86ae280478147c1d5
Author: zhangstar333 <87...@users.noreply.github.com>
AuthorDate: Thu Apr 14 12:07:26 2022 +0800
[Feature]support stddev/variance agg functions to window function (#8962)
---
be/src/exprs/aggregate_functions.cpp | 173 +++-
be/src/exprs/aggregate_functions.h | 17 +
.../vec/aggregate_functions/aggregate_function.h | 1 +
.../aggregate_function_percentile_approx.h | 17 +-
.../java/org/apache/doris/catalog/FunctionSet.java | 167 +++-
.../test_select_stddev_variance_window.out | 1021 ++++++++++++++++++++
.../correctness/test_stddev_variance_window.csv | 15 +
.../test_select_stddev_variance_window.groovy | 155 +++
8 files changed, 1496 insertions(+), 70 deletions(-)
diff --git a/be/src/exprs/aggregate_functions.cpp b/be/src/exprs/aggregate_functions.cpp
index f8bfa84ea3..30ab76eaa3 100644
--- a/be/src/exprs/aggregate_functions.cpp
+++ b/be/src/exprs/aggregate_functions.cpp
@@ -27,6 +27,7 @@
#include "exprs/anyval_util.h"
#include "exprs/hybrid_set.h"
#include "runtime/datetime_value.h"
+#include "runtime/decimalv2_value.h"
#include "runtime/runtime_state.h"
#include "runtime/string_value.h"
#include "util/counts.h"
@@ -1903,6 +1904,45 @@ void AggregateFunctions::knuth_var_update(FunctionContext* ctx, const T& src, St
state->count = temp;
}
+template <typename T>
+void AggregateFunctions::knuth_var_remove(FunctionContext* context, const T& src, StringVal* dst) {
+ if (src.is_null) {
+ return;
+ }
+ KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(dst->ptr);
+ double count = state->count - 1;
+ double mean = (state->mean * (count + 1) - src.val) / count;
+ double m2 = state->m2 - ((count * (src.val - mean) * (src.val - mean)) / (count + 1));
+ state->m2 = m2;
+ state->mean = mean;
+ state->count = count;
+}
+
+void AggregateFunctions::knuth_var_remove(FunctionContext* ctx, const DecimalV2Val& src,
+ StringVal* dst) {
+ if (src.is_null) {
+ return;
+ }
+ DecimalV2KnuthVarianceState* state = reinterpret_cast<DecimalV2KnuthVarianceState*>(dst->ptr);
+
+ DecimalV2Value now_src = DecimalV2Value::from_decimal_val(src);
+ DecimalV2Value now_mean = DecimalV2Value::from_decimal_val(state->mean);
+ DecimalV2Value now_m2 = DecimalV2Value::from_decimal_val(state->m2);
+ DecimalV2Value now_count = DecimalV2Value();
+ now_count.assign_from_double(state->count);
+ DecimalV2Value now_count_minus = DecimalV2Value();
+ now_count_minus.assign_from_double(state->count - 1);
+
+ DecimalV2Value decimal_mean = (now_mean * now_count - now_src) / now_count_minus;
+ DecimalV2Value decimal_m2 =
+ now_m2 -
+ ((now_count_minus * (now_src - decimal_mean) * (now_src - decimal_mean)) / now_count);
+
+ decimal_m2.to_decimal_val(&state->m2);
+ decimal_mean.to_decimal_val(&state->mean);
+ --state->count;
+}
+
void AggregateFunctions::knuth_var_update(FunctionContext* ctx, const DecimalV2Val& src,
StringVal* dst) {
DCHECK(!dst->is_null);
@@ -1980,98 +2020,161 @@ void AggregateFunctions::decimalv2_knuth_var_merge(FunctionContext* ctx, const S
new_dst_m2.to_decimal_val(&dst_state->m2);
}
-DoubleVal AggregateFunctions::knuth_var_finalize(FunctionContext* ctx, const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_var_get_value(FunctionContext* ctx, const StringVal& state_sv) {
KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0 || state->count == 1) return DoubleVal::null();
+ if (state->count == 0 || state->count == 1) {
+ return DoubleVal::null();
+ }
double variance = compute_knuth_variance(*state, false);
- ctx->free(state_sv.ptr);
return DoubleVal(variance);
}
-DecimalV2Val AggregateFunctions::decimalv2_knuth_var_finalize(FunctionContext* ctx,
- const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_var_finalize(FunctionContext* ctx, const StringVal& state_sv) {
+ DoubleVal result = knuth_var_get_value(ctx, state_sv);
+ ctx->free(state_sv.ptr);
+ return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_get_value(FunctionContext* ctx,
+ const StringVal& state_sv) {
DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
DecimalV2KnuthVarianceState* state =
reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0 || state->count == 1) return DecimalV2Val::null();
+ if (state->count == 0 || state->count == 1) {
+ return DecimalV2Val::null();
+ }
DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, false);
DecimalV2Val res;
variance.to_decimal_val(&res);
- delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
return res;
}
-DoubleVal AggregateFunctions::knuth_var_pop_finalize(FunctionContext* ctx,
- const StringVal& state_sv) {
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_finalize(FunctionContext* ctx,
+ const StringVal& state_sv) {
+ DecimalV2Val result = decimalv2_knuth_var_get_value(ctx, state_sv);
+ delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+ return result;
+}
+
+DoubleVal AggregateFunctions::knuth_var_pop_get_value(FunctionContext* ctx,
+ const StringVal& state_sv) {
DCHECK_EQ(state_sv.len, sizeof(KnuthVarianceState));
KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0) return DoubleVal::null();
+ if (state->count == 0) {
+ return DoubleVal::null();
+ }
double variance = compute_knuth_variance(*state, true);
- ctx->free(state_sv.ptr);
return DoubleVal(variance);
}
-DecimalV2Val AggregateFunctions::decimalv2_knuth_var_pop_finalize(FunctionContext* ctx,
- const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_var_pop_finalize(FunctionContext* ctx,
+ const StringVal& state_sv) {
+ DoubleVal result = knuth_var_pop_get_value(ctx, state_sv);
+ ctx->free(state_sv.ptr);
+ return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_pop_get_value(FunctionContext* ctx,
+ const StringVal& state_sv) {
DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
DecimalV2KnuthVarianceState* state =
reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0) return DecimalV2Val::null();
+ if (state->count == 0) {
+ return DecimalV2Val::null();
+ }
DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, true);
DecimalV2Val res;
variance.to_decimal_val(&res);
- delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
return res;
}
-DoubleVal AggregateFunctions::knuth_stddev_finalize(FunctionContext* ctx,
- const StringVal& state_sv) {
+DecimalV2Val AggregateFunctions::decimalv2_knuth_var_pop_finalize(FunctionContext* ctx,
+ const StringVal& state_sv) {
+ DecimalV2Val result = decimalv2_knuth_var_pop_get_value(ctx, state_sv);
+ delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+ return result;
+}
+
+DoubleVal AggregateFunctions::knuth_stddev_get_value(FunctionContext* ctx,
+ const StringVal& state_sv) {
DCHECK_EQ(state_sv.len, sizeof(KnuthVarianceState));
KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0 || state->count == 1) return DoubleVal::null();
+ if (state->count == 0 || state->count == 1) {
+ return DoubleVal::null();
+ }
double variance = sqrt(compute_knuth_variance(*state, false));
- ctx->free(state_sv.ptr);
return DoubleVal(variance);
}
-DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_finalize(FunctionContext* ctx,
- const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_stddev_finalize(FunctionContext* ctx,
+ const StringVal& state_sv) {
+ DoubleVal result = knuth_stddev_get_value(ctx, state_sv);
+ ctx->free(state_sv.ptr);
+ return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_get_value(FunctionContext* ctx,
+ const StringVal& state_sv) {
DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
DecimalV2KnuthVarianceState* state =
reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0 || state->count == 1) return DecimalV2Val::null();
+ if (state->count == 0 || state->count == 1) {
+ return DecimalV2Val::null();
+ }
DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, false);
variance = DecimalV2Value::sqrt(variance);
DecimalV2Val res;
variance.to_decimal_val(&res);
- delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
return res;
}
-DoubleVal AggregateFunctions::knuth_stddev_pop_finalize(FunctionContext* ctx,
- const StringVal& state_sv) {
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_finalize(FunctionContext* ctx,
+ const StringVal& state_sv) {
+ DecimalV2Val result = decimalv2_knuth_stddev_get_value(ctx, state_sv);
+ delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+ return result;
+}
+
+DoubleVal AggregateFunctions::knuth_stddev_pop_get_value(FunctionContext* ctx,
+ const StringVal& state_sv) {
DCHECK_EQ(state_sv.len, sizeof(KnuthVarianceState));
KnuthVarianceState* state = reinterpret_cast<KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0) return DoubleVal::null();
+ if (state->count == 0) {
+ return DoubleVal::null();
+ }
double variance = sqrt(compute_knuth_variance(*state, true));
- ctx->free(state_sv.ptr);
return DoubleVal(variance);
}
-DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_pop_finalize(FunctionContext* ctx,
- const StringVal& state_sv) {
+DoubleVal AggregateFunctions::knuth_stddev_pop_finalize(FunctionContext* ctx,
+ const StringVal& state_sv) {
+ DoubleVal result = knuth_stddev_pop_get_value(ctx, state_sv);
+ ctx->free(state_sv.ptr);
+ return result;
+}
+
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_pop_get_value(FunctionContext* ctx,
+ const StringVal& state_sv) {
DCHECK_EQ(state_sv.len, sizeof(DecimalV2KnuthVarianceState));
DecimalV2KnuthVarianceState* state =
reinterpret_cast<DecimalV2KnuthVarianceState*>(state_sv.ptr);
- if (state->count == 0) return DecimalV2Val::null();
+ if (state->count == 0) {
+ return DecimalV2Val::null();
+ }
DecimalV2Value variance = decimalv2_compute_knuth_variance(*state, true);
variance = DecimalV2Value::sqrt(variance);
DecimalV2Val res;
variance.to_decimal_val(&res);
- delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
return res;
}
+DecimalV2Val AggregateFunctions::decimalv2_knuth_stddev_pop_finalize(FunctionContext* ctx,
+ const StringVal& state_sv) {
+ DecimalV2Val result = decimalv2_knuth_stddev_pop_get_value(ctx, state_sv);
+ delete (DecimalV2KnuthVarianceState*)state_sv.ptr;
+ return result;
+}
+
struct RankState {
int64_t rank;
int64_t count;
@@ -2757,6 +2860,14 @@ template void AggregateFunctions::knuth_var_update(FunctionContext*, const BigIn
template void AggregateFunctions::knuth_var_update(FunctionContext*, const FloatVal&, StringVal*);
template void AggregateFunctions::knuth_var_update(FunctionContext*, const DoubleVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const TinyIntVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const SmallIntVal&,
+ StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const IntVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const BigIntVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const FloatVal&, StringVal*);
+template void AggregateFunctions::knuth_var_remove(FunctionContext*, const DoubleVal&, StringVal*);
+
template void AggregateFunctions::first_val_update<BooleanVal>(FunctionContext*,
const BooleanVal& src,
BooleanVal* dst);
diff --git a/be/src/exprs/aggregate_functions.h b/be/src/exprs/aggregate_functions.h
index b010692079..de96cccf10 100644
--- a/be/src/exprs/aggregate_functions.h
+++ b/be/src/exprs/aggregate_functions.h
@@ -262,6 +262,8 @@ public:
static void knuth_var_init(FunctionContext* context, StringVal* val);
template <typename T>
static void knuth_var_update(FunctionContext* context, const T& input, StringVal* val);
+ template <typename T>
+ static void knuth_var_remove(FunctionContext* context, const T& src, StringVal* dst);
static void knuth_var_merge(FunctionContext* context, const StringVal& src, StringVal* dst);
static DoubleVal knuth_var_finalize(FunctionContext* context, const StringVal& val);
@@ -274,8 +276,14 @@ public:
/// Calculates the biased STDDEV, uses KnuthVar Init-Update-Merge functions
static DoubleVal knuth_stddev_pop_finalize(FunctionContext* context, const StringVal& val);
+ static DoubleVal knuth_var_get_value(FunctionContext* ctx, const StringVal& state_sv);
+ static DoubleVal knuth_var_pop_get_value(FunctionContext* context, const StringVal& val);
+ static DoubleVal knuth_stddev_get_value(FunctionContext* ctx, const StringVal& state_sv);
+ static DoubleVal knuth_stddev_pop_get_value(FunctionContext* context, const StringVal& val);
+
// variance/stddev for decimals.
static void decimalv2_knuth_var_init(FunctionContext* context, StringVal* val);
+ static void knuth_var_remove(FunctionContext* ctx, const DecimalV2Val& src, StringVal* dst);
static void knuth_var_update(FunctionContext* context, const DecimalV2Val& src, StringVal* val);
static void decimalv2_knuth_var_merge(FunctionContext* context, const StringVal& src,
StringVal* val);
@@ -288,6 +296,15 @@ public:
static DecimalV2Val decimalv2_knuth_stddev_pop_finalize(FunctionContext* context,
const StringVal& val);
+ static DecimalV2Val decimalv2_knuth_var_get_value(FunctionContext* ctx,
+ const StringVal& state_sv);
+ static DecimalV2Val decimalv2_knuth_var_pop_get_value(FunctionContext* context,
+ const StringVal& val);
+ static DecimalV2Val decimalv2_knuth_stddev_get_value(FunctionContext* context,
+ const StringVal& val);
+ static DecimalV2Val decimalv2_knuth_stddev_pop_get_value(FunctionContext* context,
+ const StringVal& val);
+
/// ----------------------------- Analytic Functions ---------------------------------
/// Analytic functions implement the UDA interface (except Merge(), Serialize()) and are
/// used internally by the AnalyticEvalNode. Some analytic functions store intermediate
diff --git a/be/src/vec/aggregate_functions/aggregate_function.h b/be/src/vec/aggregate_functions/aggregate_function.h
index 7506883d71..56e404d9e9 100644
--- a/be/src/vec/aggregate_functions/aggregate_function.h
+++ b/be/src/vec/aggregate_functions/aggregate_function.h
@@ -159,6 +159,7 @@ public:
}
}
//now this is use for sum/count/avg/min/max win function, other win function should override this function in class
+ //stddev_pop/stddev_samp/variance_pop/variance_samp
void add_range_single_place(int64_t partition_start, int64_t partition_end, int64_t frame_start,
int64_t frame_end, AggregateDataPtr place, const IColumn** columns,
Arena* arena) const override {
diff --git a/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h b/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h
index cca176784c..e2d4b8e3f9 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_percentile_approx.h
@@ -35,7 +35,15 @@ struct PercentileApproxState {
void init(double compression = 10000) {
if (!init_flag) {
+ //https://doris.apache.org/zh-CN/sql-reference/sql-functions/aggregate-functions/percentile_approx.html#description
+ //The compression parameter setting range is [2048, 10000].
+ //If the value of compression parameter is not specified set, or is outside the range of [2048, 10000],
+ //will use the default value of 10000
+ if (compression < 2048 || compression > 10000) {
+ compression = 10000;
+ }
digest.reset(new TDigest(compression));
+ compressions = compression;
init_flag = true;
}
}
@@ -47,6 +55,7 @@ struct PercentileApproxState {
}
write_binary(target_quantile, buf);
+ write_binary(compressions, buf);
uint32_t serialize_size = digest->serialized_size();
std::string result(serialize_size, '0');
DCHECK(digest.get() != nullptr);
@@ -62,9 +71,10 @@ struct PercentileApproxState {
}
read_binary(target_quantile, buf);
+ read_binary(compressions, buf);
std::string str;
read_binary(str, buf);
- digest.reset(new TDigest());
+ digest.reset(new TDigest(compressions));
digest->unserialize((uint8_t*)str.c_str());
}
@@ -84,7 +94,7 @@ struct PercentileApproxState {
DCHECK(digest.get() != nullptr);
digest->merge(rhs.digest.get());
} else {
- digest.reset(new TDigest());
+ digest.reset(new TDigest(compressions));
digest->merge(rhs.digest.get());
init_flag = true;
}
@@ -101,12 +111,13 @@ struct PercentileApproxState {
void reset() {
target_quantile = INIT_QUANTILE;
init_flag = false;
- digest.reset();
+ digest.reset(new TDigest(compressions));
}
bool init_flag = false;
std::unique_ptr<TDigest> digest = nullptr;
double target_quantile = INIT_QUANTILE;
+ double compressions = 10000;
};
class AggregateFunctionPercentileApprox
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
index 7120a40ec5..ac8403843e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
@@ -402,7 +402,25 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
.put(Type.DECIMALV2,
"16knuth_var_updateEPN9doris_udf15FunctionContextERKNS1_12DecimalV2ValEPNS1_9StringValE")
.build();
-
+
+
+ private static final Map<Type, String> STDDEV_REMOVE_SYMBOL =
+ ImmutableMap.<Type, String>builder()
+ .put(Type.TINYINT,
+ "16knuth_var_removeIN9doris_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+ .put(Type.SMALLINT,
+ "16knuth_var_removeIN9doris_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+ .put(Type.INT,
+ "16knuth_var_removeIN9doris_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+ .put(Type.BIGINT,
+ "16knuth_var_removeIN9doris_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+ .put(Type.FLOAT,
+ "16knuth_var_removeIN9doris_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+ .put(Type.DOUBLE,
+ "16knuth_var_removeIN9doris_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
+ .put(Type.DECIMALV2,
+ "16knuth_var_removeEPN9doris_udf15FunctionContextERKNS1_12DecimalV2ValEPNS1_9StringValE")
+ .build();
private static final Map<Type, String> STDDEV_MERGE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.TINYINT,
@@ -439,6 +457,24 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
"31decimalv2_knuth_stddev_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
.build();
+ private static final Map<Type, String> STDDEV_GET_VALUE_SYMBOL =
+ ImmutableMap.<Type, String>builder()
+ .put(Type.TINYINT,
+ "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.SMALLINT,
+ "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.INT,
+ "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.BIGINT,
+ "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.FLOAT,
+ "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DOUBLE,
+ "22knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DECIMALV2,
+ "32decimalv2_knuth_stddev_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .build();
+
private static final Map<Type, String> STDDEV_POP_FINALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.TINYINT,
@@ -457,6 +493,24 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
"35decimalv2_knuth_stddev_pop_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
.build();
+ private static final Map<Type, String> STDDEV_POP_GET_VALUE_SYMBOL =
+ ImmutableMap.<Type, String>builder()
+ .put(Type.TINYINT,
+ "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.SMALLINT,
+ "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.INT,
+ "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.BIGINT,
+ "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.FLOAT,
+ "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DOUBLE,
+ "26knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DECIMALV2,
+ "36decimalv2_knuth_stddev_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .build();
+
private static final Map<Type, String> VAR_FINALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.TINYINT,
@@ -475,6 +529,24 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
"28decimalv2_knuth_var_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
.build();
+ private static final Map<Type, String> VAR_GET_VALUE_SYMBOL =
+ ImmutableMap.<Type, String>builder()
+ .put(Type.TINYINT,
+ "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.SMALLINT,
+ "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.INT,
+ "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.BIGINT,
+ "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.FLOAT,
+ "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DOUBLE,
+ "19knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DECIMALV2,
+ "29decimalv2_knuth_var_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .build();
+
private static final Map<Type, String> VAR_POP_FINALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.TINYINT,
@@ -493,6 +565,23 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
"32decimalv2_knuth_var_pop_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE")
.build();
+ private static final Map<Type, String> VAR_POP_GET_VALUE_SYMBOL =
+ ImmutableMap.<Type, String>builder()
+ .put(Type.TINYINT,
+ "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.SMALLINT,
+ "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.INT,
+ "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.BIGINT,
+ "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.FLOAT,
+ "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DOUBLE,
+ "23knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .put(Type.DECIMALV2,
+ "33decimalv2_knuth_var_pop_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE")
+ .build();
public static final String HLL_HASH = "hll_hash";
public static final String HLL_UNION = "hll_union";
@@ -1688,25 +1777,27 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + STDDEV_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
+
addBuiltin(AggregateFunction.createBuiltin("stddev_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + STDDEV_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + STDDEV_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
+
addBuiltin(AggregateFunction.createBuiltin("stddev_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + STDDEV_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
//vec stddev stddev_samp stddev_pop
addBuiltin(AggregateFunction.createBuiltin("stddev",
@@ -1714,25 +1805,25 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("stddev_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + STDDEV_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("stddev_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + STDDEV_POP_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
//vec: variance variance_samp var_samp variance_pop var_pop
addBuiltin(AggregateFunction.createBuiltin("variance",
@@ -1740,82 +1831,86 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("variance_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("var_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("variance_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + VAR_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("var_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, null, null,
prefix + VAR_FINALIZE_SYMBOL.get(t),
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("variance",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + VAR_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
+
addBuiltin(AggregateFunction.createBuiltin("variance_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + VAR_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + VAR_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
+
addBuiltin(AggregateFunction.createBuiltin("var_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + VAR_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + VAR_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
+
addBuiltin(AggregateFunction.createBuiltin("variance_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + VAR_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
+
addBuiltin(AggregateFunction.createBuiltin("var_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), Type.VARCHAR,
prefix + STDDEV_INIT_SYMBOL.get(t),
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + STDDEV_MERGE_SYMBOL.get(t),
- null,
+ null, prefix + VAR_POP_GET_VALUE_SYMBOL.get(t), prefix + STDDEV_REMOVE_SYMBOL.get(t),
prefix + VAR_POP_FINALIZE_SYMBOL.get(t),
- false, false, false));
+ false, true, false));
}
}
@@ -2065,7 +2160,7 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
prefix + "16percentile_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "20percentile_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
prefix + "19percentile_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("percentile_approx",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
@@ -2074,7 +2169,7 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
prefix + "23percentile_approx_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "27percentile_approx_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
prefix + "26percentile_approx_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
- false, false, false, true));
+ false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("percentile_approx",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
@@ -2083,7 +2178,7 @@ public class FunctionSet<min_initIN9doris_udf12DecimalV2ValEEEvPNS2_15FunctionCo
prefix + "23percentile_approx_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix + "27percentile_approx_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
prefix + "26percentile_approx_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE",
- false, false, false, true));
+ false, true, false, true));
// Avg
// TODO: switch to CHAR(sizeof(AvgIntermediateType) when that becomes available
diff --git a/regression-test/data/correctness/test_select_stddev_variance_window.out b/regression-test/data/correctness/test_select_stddev_variance_window.out
new file mode 100644
index 0000000000..b3a9ee95e5
--- /dev/null
+++ b/regression-test/data/correctness/test_select_stddev_variance_window.out
@@ -0,0 +1,1021 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !select_default --
+1 10887.581821431579
+2 19879.492787402174
+3 19879.492787402174
+4 19879.492787402174
+5 10887.581821431579
+6 10887.581821431579
+7 19879.492787402174
+8 10887.581821431579
+9 11616.726911608488
+10 21153.67606592388
+11 12502.185191397542
+12 22705.953345616945
+13 24652.592905412606
+14 23184.696218626632
+15 751.5664890746526
+
+-- !select_default --
+1 \N
+2 \N
+3 0.0
+4 1.5
+5 0.0
+6 2.0
+7 2.0548046676563256
+8 14509.831241839674
+9 14935.247526126464
+10 16384.606949478188
+11 14933.950939609607
+12 16385.07833365468
+13 26770.601404442812
+14 26770.60140444281
+15 817.8872511266792
+
+-- !select_default --
+1 2.0
+2 1.5
+3 2.0548046676563256
+4 15049.645234606029
+5 14509.831241839674
+6 13596.522128838684
+7 13902.500120481925
+8 12502.835735944067
+9 12502.835735944067
+10 20746.59631264849
+11 12502.185191397542
+12 24751.734420036104
+13 24652.592905412606
+14 23184.696218626632
+15 751.5664890746526
+
+-- !select_default --
+1 0.0
+2 0.0
+3 0.0
+4 0.0
+5 0.0
+6 0.0
+7 0.0
+8 0.0
+9 0.0
+10 0.0
+11 0.0
+12 0.0
+13 0.0
+14 0.0
+15 0.0
+
+-- !select_default --
+1 10887.581821431579
+2 19879.492787402174
+3 21153.67606592388
+4 22705.953345616945
+5 11616.726911608488
+6 12502.185191397542
+7 24652.592905412606
+8 751.5664890746526
+9 1.247219128924647
+10 23184.696218626632
+11 1.5
+12 26754.41351752392
+13 16511.0
+14 0.0
+15 0.0
+
+-- !select_default --
+1 0.0
+2 0.0
+3 1.5
+4 2.0548046676563256
+5 2.0
+6 14509.831241839674
+7 15049.645234606029
+8 13596.522128838684
+9 12502.835735944067
+10 13902.500120481925
+11 11616.935190583712
+12 18941.26337230146
+13 21209.57875727909
+14 19879.492787402174
+15 10887.581821431579
+
+-- !select_default --
+1 11759.932436232868
+2 21252.07172380075
+3 21252.07172380075
+4 21252.07172380075
+5 11759.932436232868
+6 11759.932436232868
+7 21252.07172380075
+8 11759.932436232868
+9 12725.486747730582
+10 22848.58156689486
+11 13977.867977628062
+12 24873.125674108593
+13 27562.436779065818
+14 26771.381205807567
+15 867.8342295623053
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 2.1213203435596424
+5 \N
+6 2.8284271247461903
+7 2.5166114784235836
+8 17770.84139820059
+9 18291.867810587304
+10 20066.963331140396
+11 18290.27982290047
+12 20067.540656493013
+13 32787.156774159805
+14 32787.156774159805
+15 1001.703216193965
+
+-- !select_default --
+1 2.8284271247461903
+2 2.1213203435596424
+3 2.5166114784235836
+4 17377.83345481632
+5 17770.84139820059
+6 15699.911422255434
+7 15543.467663298301
+8 13978.595308542272
+9 13978.595308542272
+10 23195.39982841425
+11 13977.86797762806
+12 27673.28036211103
+13 27562.436779065814
+14 26771.381205807567
+15 867.8342295623053
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 \N
+5 \N
+6 \N
+7 \N
+8 \N
+9 \N
+10 \N
+11 \N
+12 \N
+13 \N
+14 \N
+15 \N
+
+-- !select_default --
+1 11759.932436232868
+2 21252.07172380075
+3 22848.58156689486
+4 24873.125674108593
+5 12725.486747730582
+6 13977.867977628062
+7 27562.436779065818
+8 867.8342295623053
+9 1.5275252316519468
+10 26771.381205807567
+11 2.1213203435596424
+12 32767.330742677226
+13 23350.08012834217
+14 \N
+15 \N
+
+-- !select_default --
+1 \N
+2 \N
+3 2.1213203435596424
+4 2.5166114784235836
+5 2.8284271247461903
+6 17770.84139820059
+7 17377.83345481632
+8 15699.911422255434
+9 13978.595308542272
+10 15543.467663298301
+11 12725.71490591655
+12 20749.114433311766
+13 22908.963374730905
+14 21252.071723800753
+15 11759.932436232868
+
+-- !select_default --
+1 1.1853943791836736E8
+2 3.95194233484375E8
+3 3.95194233484375E8
+4 3.95194233484375E8
+5 1.1853943791836736E8
+6 1.1853943791836736E8
+7 3.95194233484375E8
+8 1.1853943791836736E8
+9 1.349483441388889E8
+10 4.474780111020408E8
+11 1.5630463456E8
+12 5.155603173333333E8
+13 6.0775033696E8
+14 5.3753013875E8
+15 564852.1875
+
+-- !select_default --
+1 \N
+2 \N
+3 0.0
+4 2.25
+5 0.0
+6 4.0
+7 4.222222222222222
+8 2.1053520266666666E8
+9 2.2306161866666666E8
+10 2.684553448888889E8
+11 2.2302289066666666E8
+12 2.68470792E8
+13 7.166650995555555E8
+14 7.166650995555553E8
+15 668939.5555555556
+
+-- !select_default --
+1 4.0
+2 2.25
+3 4.222222222222222
+4 2.2649182168749997E8
+5 2.1053520266666666E8
+6 1.84865414E8
+7 1.9327950959999996E8
+8 1.5632090144E8
+9 1.5632090144E8
+10 4.3042125855999994E8
+11 1.5630463456E8
+12 6.126483568E8
+13 6.077503369599999E8
+14 5.3753013875E8
+15 564852.1875
+
+-- !select_default --
+1 0.0
+2 0.0
+3 0.0
+4 0.0
+5 0.0
+6 0.0
+7 0.0
+8 0.0
+9 0.0
+10 0.0
+11 0.0
+12 0.0
+13 0.0
+14 0.0
+15 0.0
+
+-- !select_default --
+1 1.1853943791836736E8
+2 3.95194233484375E8
+3 4.474780111020408E8
+4 5.155603173333333E8
+5 1.349483441388889E8
+6 1.5630463456E8
+7 6.0775033696E8
+8 564852.1875
+9 1.5555555555555556
+10 5.3753013875E8
+11 2.25
+12 7.157986426666666E8
+13 2.72613121E8
+14 0.0
+15 0.0
+
+-- !select_default --
+1 0.0
+2 0.0
+3 2.25
+4 4.222222222222222
+5 4.0
+6 2.1053520266666666E8
+7 2.2649182168749997E8
+8 1.84865414E8
+9 1.5632090144E8
+10 1.9327950959999996E8
+11 1.3495318322222224E8
+12 3.587714581388889E8
+13 4.498462310612245E8
+14 3.9519423348437506E8
+15 1.1853943791836736E8
+
+-- !select_default --
+1 1.382960109047619E8
+2 4.516505525535714E8
+3 4.516505525535714E8
+4 4.516505525535714E8
+5 1.382960109047619E8
+6 1.382960109047619E8
+7 4.516505525535714E8
+8 1.382960109047619E8
+9 1.6193801296666667E8
+10 5.2205767961904764E8
+11 1.9538079320000002E8
+12 6.186723808E8
+13 7.596879212E8
+14 7.167068516666666E8
+15 753136.25
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 4.5
+5 \N
+6 8.0
+7 6.333333333333334
+8 3.15802804E8
+9 3.34592428E8
+10 4.026830173333333E8
+11 3.34534336E8
+12 4.02706188E8
+13 1.0749976493333333E9
+14 1.074997649333333E9
+15 1003409.3333333334
+
+-- !select_default --
+1 8.0
+2 4.5
+3 6.333333333333334
+4 3.019890955833333E8
+5 3.15802804E8
+6 2.4648721866666666E8
+7 2.4159938699999997E8
+8 1.954011268E8
+9 1.954011268E8
+10 5.380265731999999E8
+11 1.953807932E8
+12 7.658104459999999E8
+13 7.596879211999999E8
+14 7.167068516666666E8
+15 753136.25
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 \N
+5 \N
+6 \N
+7 \N
+8 \N
+9 \N
+10 \N
+11 \N
+12 \N
+13 \N
+14 \N
+15 \N
+
+-- !select_default --
+1 1.382960109047619E8
+2 4.516505525535714E8
+3 5.2205767961904764E8
+4 6.186723808E8
+5 1.6193801296666667E8
+6 1.9538079320000002E8
+7 7.596879212E8
+8 753136.25
+9 2.3333333333333335
+10 7.167068516666666E8
+11 4.5
+12 1.073697964E9
+13 5.45226242E8
+14 \N
+15 \N
+
+-- !select_default --
+1 \N
+2 \N
+3 4.5
+4 6.333333333333334
+5 8.0
+6 3.15802804E8
+7 3.019890955833333E8
+8 2.4648721866666666E8
+9 1.954011268E8
+10 2.4159938699999997E8
+11 1.6194381986666667E8
+12 4.305257497666667E8
+13 5.2482060290476197E8
+14 4.516505525535715E8
+15 1.382960109047619E8
+
+-- !select_default --
+1 10887.581821431579
+2 19879.492787402174
+3 19879.492787402174
+4 19879.492787402174
+5 10887.581821431579
+6 10887.581821431579
+7 19879.492787402174
+8 10887.581821431579
+9 11616.726911608488
+10 21153.67606592388
+11 12502.185191397542
+12 22705.953345616945
+13 24652.592905412606
+14 23184.696218626632
+15 751.5664890746526
+
+-- !select_default --
+1 \N
+2 \N
+3 0.0
+4 1.5
+5 0.0
+6 2.0
+7 2.0548046676563256
+8 14509.831241839674
+9 14935.247526126464
+10 16384.606949478188
+11 14933.950939609607
+12 16385.07833365468
+13 26770.601404442812
+14 26770.601404442812
+15 817.8872511266792
+
+-- !select_default --
+1 2.0
+2 1.5
+3 2.0548046676563256
+4 15049.645234606029
+5 14509.831241839674
+6 13596.522128838684
+7 13902.500120481925
+8 12502.835735944067
+9 12502.835735944067
+10 20746.596312648493
+11 12502.185191397542
+12 24751.734420036104
+13 24652.592905412606
+14 23184.696218626632
+15 751.5664890746526
+
+-- !select_default --
+1 0.0
+2 0.0
+3 0.0
+4 0.0
+5 0.0
+6 0.0
+7 0.0
+8 0.0
+9 0.0
+10 0.0
+11 0.0
+12 0.0
+13 0.0
+14 0.0
+15 0.0
+
+-- !select_default --
+1 10887.581821431579
+2 19879.492787402174
+3 21153.67606592388
+4 22705.953345616945
+5 11616.726911608488
+6 12502.185191397542
+7 24652.592905412606
+8 751.5664890746526
+9 1.247219128924647
+10 23184.696218626632
+11 1.5
+12 26754.41351752392
+13 16511.0
+14 0.0
+15 0.0
+
+-- !select_default --
+1 0.0
+2 0.0
+3 1.5
+4 2.0548046676563256
+5 2.0
+6 14509.831241839674
+7 15049.645234606029
+8 13596.522128838684
+9 12502.835735944067
+10 13902.500120481925
+11 11616.935190583712
+12 18941.26337230146
+13 21209.57875727909
+14 19879.492787402174
+15 10887.581821431579
+
+-- !select_default --
+1 11759.932436232868
+2 21252.07172380075
+3 21252.07172380075
+4 21252.07172380075
+5 11759.932436232868
+6 11759.932436232868
+7 21252.07172380075
+8 11759.932436232868
+9 12725.486747730582
+10 22848.58156689486
+11 13977.867977628062
+12 24873.125674108593
+13 27562.436779065818
+14 26771.381205807567
+15 867.8342295623053
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 2.1213203435596424
+5 \N
+6 2.8284271247461903
+7 2.5166114784235836
+8 17770.84139820059
+9 18291.867810587304
+10 20066.963331140396
+11 18290.27982290047
+12 20067.540656493013
+13 32787.156774159805
+14 32787.156774159805
+15 1001.703216193965
+
+-- !select_default --
+1 2.8284271247461903
+2 2.1213203435596424
+3 2.5166114784235836
+4 17377.83345481632
+5 17770.84139820059
+6 15699.911422255434
+7 15543.467663298301
+8 13978.595308542272
+9 13978.595308542272
+10 23195.399828414254
+11 13977.86797762806
+12 27673.28036211103
+13 27562.436779065818
+14 26771.381205807567
+15 867.8342295623053
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 \N
+5 \N
+6 \N
+7 \N
+8 \N
+9 \N
+10 \N
+11 \N
+12 \N
+13 \N
+14 \N
+15 \N
+
+-- !select_default --
+1 11759.932436232868
+2 21252.07172380075
+3 22848.58156689486
+4 24873.125674108593
+5 12725.486747730582
+6 13977.867977628062
+7 27562.436779065818
+8 867.8342295623053
+9 1.5275252316519468
+10 26771.381205807567
+11 2.1213203435596424
+12 32767.330742677226
+13 23350.08012834217
+14 \N
+15 \N
+
+-- !select_default --
+1 \N
+2 \N
+3 2.1213203435596424
+4 2.5166114784235836
+5 2.8284271247461903
+6 17770.84139820059
+7 17377.83345481632
+8 15699.911422255434
+9 13978.595308542272
+10 15543.467663298301
+11 12725.71490591655
+12 20749.114433311766
+13 22908.963374730905
+14 21252.071723800753
+15 11759.932436232868
+
+-- !select_default --
+1 1.1853943791836736E8
+2 3.95194233484375E8
+3 3.95194233484375E8
+4 3.95194233484375E8
+5 1.1853943791836736E8
+6 1.1853943791836736E8
+7 3.95194233484375E8
+8 1.1853943791836736E8
+9 1.349483441388889E8
+10 4.474780111020408E8
+11 1.5630463456E8
+12 5.155603173333333E8
+13 6.0775033696E8
+14 5.3753013875E8
+15 564852.1875
+
+-- !select_default --
+1 \N
+2 \N
+3 0.0
+4 2.25
+5 0.0
+6 4.0
+7 4.222222222222222
+8 2.1053520266666666E8
+9 2.2306161866666666E8
+10 2.684553448888889E8
+11 2.2302289066666666E8
+12 2.68470792E8
+13 7.166650995555555E8
+14 7.166650995555555E8
+15 668939.5555555556
+
+-- !select_default --
+1 4.0
+2 2.25
+3 4.222222222222222
+4 2.2649182168749997E8
+5 2.1053520266666666E8
+6 1.84865414E8
+7 1.9327950959999996E8
+8 1.5632090144E8
+9 1.5632090144E8
+10 4.3042125856000006E8
+11 1.5630463456E8
+12 6.126483568E8
+13 6.0775033696E8
+14 5.3753013875E8
+15 564852.1875
+
+-- !select_default --
+1 0.0
+2 0.0
+3 0.0
+4 0.0
+5 0.0
+6 0.0
+7 0.0
+8 0.0
+9 0.0
+10 0.0
+11 0.0
+12 0.0
+13 0.0
+14 0.0
+15 0.0
+
+-- !select_default --
+1 1.1853943791836736E8
+2 3.95194233484375E8
+3 4.474780111020408E8
+4 5.155603173333333E8
+5 1.349483441388889E8
+6 1.5630463456E8
+7 6.0775033696E8
+8 564852.1875
+9 1.5555555555555556
+10 5.3753013875E8
+11 2.25
+12 7.157986426666666E8
+13 2.72613121E8
+14 0.0
+15 0.0
+
+-- !select_default --
+1 0.0
+2 0.0
+3 2.25
+4 4.222222222222222
+5 4.0
+6 2.1053520266666666E8
+7 2.2649182168749997E8
+8 1.84865414E8
+9 1.5632090144E8
+10 1.9327950959999996E8
+11 1.3495318322222224E8
+12 3.587714581388889E8
+13 4.498462310612245E8
+14 3.9519423348437506E8
+15 1.1853943791836736E8
+
+-- !select_default --
+1 1.382960109047619E8
+2 4.516505525535714E8
+3 4.516505525535714E8
+4 4.516505525535714E8
+5 1.382960109047619E8
+6 1.382960109047619E8
+7 4.516505525535714E8
+8 1.382960109047619E8
+9 1.6193801296666667E8
+10 5.2205767961904764E8
+11 1.9538079320000002E8
+12 6.186723808E8
+13 7.596879212E8
+14 7.167068516666666E8
+15 753136.25
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 4.5
+5 \N
+6 8.0
+7 6.333333333333334
+8 3.15802804E8
+9 3.34592428E8
+10 4.026830173333333E8
+11 3.34534336E8
+12 4.02706188E8
+13 1.0749976493333333E9
+14 1.0749976493333333E9
+15 1003409.3333333334
+
+-- !select_default --
+1 8.0
+2 4.5
+3 6.333333333333334
+4 3.019890955833333E8
+5 3.15802804E8
+6 2.4648721866666666E8
+7 2.4159938699999997E8
+8 1.954011268E8
+9 1.954011268E8
+10 5.380265732E8
+11 1.953807932E8
+12 7.65810446E8
+13 7.596879212E8
+14 7.167068516666666E8
+15 753136.25
+
+-- !select_default --
+1 \N
+2 \N
+3 \N
+4 \N
+5 \N
+6 \N
+7 \N
+8 \N
+9 \N
+10 \N
+11 \N
+12 \N
+13 \N
+14 \N
+15 \N
+
+-- !select_default --
+1 1.382960109047619E8
+2 4.516505525535714E8
+3 5.2205767961904764E8
+4 6.186723808E8
+5 1.6193801296666667E8
+6 1.9538079320000002E8
+7 7.596879212E8
+8 753136.25
+9 2.3333333333333335
+10 7.167068516666666E8
+11 4.5
+12 1.073697964E9
+13 5.45226242E8
+14 \N
+15 \N
+
+-- !select_default --
+1 \N
+2 \N
+3 4.5
+4 6.333333333333334
+5 8.0
+6 3.15802804E8
+7 3.019890955833333E8
+8 2.4648721866666666E8
+9 1.954011268E8
+10 2.4159938699999997E8
+11 1.6194381986666667E8
+12 4.305257497666667E8
+13 5.2482060290476197E8
+14 4.516505525535715E8
+15 1.382960109047619E8
+
+-- !select_default --
+1 1991.8000000000002
+2 1991.0
+3 1991.0
+4 1991.0
+5 1991.8000000000002
+6 1991.8000000000002
+7 1991.0
+8 1991.8000000000002
+9 1992.0
+10 1991.0
+11 8147.0000000000055
+12 1991.0
+13 8146.200000000006
+14 14301.40000000001
+15 1991.4
+
+-- !select_default --
+1 \N
+2 \N
+3 1986.0
+4 1988.4
+5 1989.0
+6 1988.1999999999998
+7 1990.1999999999998
+8 20455.800000000003
+9 20454.200000000004
+10 1990.1999999999998
+11 20456.600000000006
+12 1991.0
+13 20456.600000000006
+14 20456.600000000006
+15 1990.1999999999998
+
+-- !select_default --
+1 1988.1999999999998
+2 1988.4
+3 1990.1999999999998
+4 1989.7999999999997
+5 20455.800000000003
+6 14300.200000000012
+7 1991.0
+8 8146.200000000006
+9 8146.200000000006
+10 8146.200000000006
+11 8147.0000000000055
+12 8146.200000000006
+13 8146.200000000006
+14 14301.40000000001
+15 1991.4
+
+-- !select_default --
+1 1989.0
+2 1986.0
+3 1989.0
+4 1991.0
+5 1985.0
+6 32767.0
+7 -32767.0
+8 255.0
+9 1991.0
+10 1991.0
+11 1989.0
+12 32767.0
+13 -32767.0
+14 255.0
+15 1992.0
+
+-- !select_default --
+1 1991.8000000000002
+2 1991.0
+3 1991.0
+4 1991.0
+5 1992.0
+6 8147.0000000000055
+7 8146.200000000006
+8 1991.4
+9 1991.6000000000001
+10 14301.40000000001
+11 1991.4
+12 19762.200000000004
+13 -6349.399999999999
+14 255.0
+15 1992.0
+
+-- !select_default --
+1 1989.0
+2 1986.0
+3 1988.4
+4 1990.1999999999998
+5 1988.1999999999998
+6 20455.800000000003
+7 1989.7999999999997
+8 14300.200000000012
+9 8146.200000000006
+10 1991.0
+11 1991.0
+12 1991.0
+13 1991.0
+14 1991.0
+15 1991.8000000000002
+
+-- !select_default --
+1 5069.4970703125
+2 1991.0
+3 1991.0
+4 1991.0
+5 5069.4970703125
+6 5069.4970703125
+7 1991.0
+8 5069.4970703125
+9 11224.505859375
+10 5068.5966796875
+11 17379.5
+12 11223.8056640625
+13 17379.0
+14 23534.203125
+15 1991.7000732421875
+
+-- !select_default --
+1 \N
+2 \N
+3 1986.0
+4 1989.0
+5 1989.0
+6 1989.0
+7 1990.7999267578125
+8 29689.203125
+9 29688.802734375
+10 1990.7999267578125
+11 29689.40234375
+12 1991.0
+13 29689.40234375
+14 29689.40234375
+15 1990.7999267578125
+
+-- !select_default --
+1 1989.0
+2 1989.0
+3 1990.7999267578125
+4 1990.39990234375
+5 29689.203125
+6 23533.6015625
+7 1991.0
+8 17379.0
+9 17379.0
+10 17379.0
+11 17379.5
+12 17379.0
+13 17379.0
+14 23534.203125
+15 1991.7000732421875
+
+-- !select_default --
+1 1989.0
+2 1986.0
+3 1989.0
+4 1991.0
+5 1985.0
+6 32767.0
+7 -32767.0
+8 255.0
+9 1991.0
+10 1991.0
+11 1989.0
+12 32767.0
+13 -32767.0
+14 255.0
+15 1992.0
+
+-- !select_default --
+1 5069.4970703125
+2 1991.0
+3 5068.5966796875
+4 11223.8056640625
+5 11224.505859375
+6 17379.5
+7 17379.0
+8 1991.7000732421875
+9 1991.9000244140625
+10 23534.203125
+11 1992.0
+12 29515.802734375
+13 255.0
+14 255.0
+15 1992.0
+
+-- !select_default --
+1 1989.0
+2 1986.0
+3 1989.0
+4 1990.7999267578125
+5 1989.0
+6 29689.203125
+7 1990.39990234375
+8 23533.6015625
+9 17379.0
+10 1991.0
+11 11223.8056640625
+12 11223.8056640625
+13 5068.5966796875
+14 1991.0
+15 5069.4970703125
+
diff --git a/regression-test/data/correctness/test_stddev_variance_window.csv b/regression-test/data/correctness/test_stddev_variance_window.csv
new file mode 100644
index 0000000000..20c6349bba
--- /dev/null
+++ b/regression-test/data/correctness/test_stddev_variance_window.csv
@@ -0,0 +1,15 @@
+6 32767 3021 123456 604587.000 true 2014-11-11 2015-03-13 12:36:38 yanhuiacng01 0.1 80699
+10 1991 5014 9223372036854775807 -258.369 false 2015-04-02 2013-04-02 15:16:52 wangyu14 -123456.54 0.235
+12 32767 -2147483647 9223372036854775807 243.325 false 1991-08-11 2013-04-02 15:16:52 liuyuantuo -564.898 3.1415927
+1 1989 1001 11011902 123.123 true 1989-03-21 1989-03-21 13:00:00 wangjing04 0.1 6.333
+2 1986 1001 11011903 1243.500 false 1901-12-31 1989-03-21 13:00:00 wangyu14 20.268 789.25
+4 1991 3021 -11011907 243243.325 false 3124-10-10 2015-03-13 10:30:00 yanhuicang01 2.06 -0.001
+5 1985 5014 -11011903 243.325 true 2015-01-01 2015-03-13 12:36:38 duyunkai@123 -0 -365
+15 1992 3021 11011920 0.000 true 9999-12-12 2015-04-02 00:00:00 3.141592653 20.456
+3 1989 1002 11011905 24453.325 false 2012-03-14 2000-01-01 00:00:00 yuanyuan06 78945 3654
+7 -32767 1002 7210457 3.141 false 1988-03-21 1901-01-01 00:00:00 jingyong 0 6058
+8 255 2147483647 11011920 -0.123 true 1989-03-21 9999-11-11 12:12:00 wangjing05 987456.123 12.14
+9 1991 -2147483647 11011902 -654.654 true 1991-08-11 1989-03-21 13:11:00 wangjing04 0 69.123
+11 1989 25699 -9223372036854775807 0.666 true 2015-04-02 1989-03-21 13:11:00 yuanyuan06 -987.001 4.336
+13 -32767 2147483647 -9223372036854775807 100.001 false 2015-04-02 2015-04-02 00:00:00 weike01 123.456 3.1415927
+14 255 103 11011902 0.000 false 2015-04-02 2015-04-02 00:00:00 3.141592654 2.036
diff --git a/regression-test/suites/correctness/test_select_stddev_variance_window.groovy b/regression-test/suites/correctness/test_select_stddev_variance_window.groovy
new file mode 100644
index 0000000000..74580523ae
--- /dev/null
+++ b/regression-test/suites/correctness/test_select_stddev_variance_window.groovy
@@ -0,0 +1,155 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+suite("test_select_stddev_variance_window") {
+ def tableName = "stddev_variance_window"
+
+ sql """ DROP TABLE IF EXISTS ${tableName} """
+ sql """
+ CREATE TABLE `${tableName}` (
+ `k1` tinyint(4) NULL COMMENT "",
+ `k2` smallint(6) NULL COMMENT "",
+ `k3` int(11) NULL COMMENT "",
+ `k4` bigint(20) NULL COMMENT "",
+ `k5` decimal(9, 3) NULL COMMENT "",
+ `k6` char(5) NULL COMMENT "",
+ `k10` date NULL COMMENT "",
+ `k11` datetime NULL COMMENT "",
+ `k7` varchar(20) NULL COMMENT "",
+ `k8` double NULL COMMENT "",
+ `k9` float NULL COMMENT ""
+ ) ENGINE=OLAP
+ DUPLICATE KEY(`k1`, `k2`, `k3`, `k4`, `k5`, `k6`, `k10`, `k11`, `k7`)
+ COMMENT "OLAP"
+ DISTRIBUTED BY HASH(`k1`) BUCKETS 5
+ PROPERTIES (
+ "replication_allocation" = "tag.location.default: 1",
+ "in_memory" = "false",
+ "storage_format" = "V2"
+ );
+ """
+ streamLoad {
+ table tableName
+
+ // default label is UUID:
+ // set 'label' UUID.randomUUID().toString()
+
+ // default column_separator is specify in doris fe config, usually is '\t'.
+ // this line change to ','
+ set 'column_separator', '\t'
+
+ // relate to ${DORIS_HOME}/regression-test/data/demo/streamload_input.csv.
+ // also, you can stream load a http stream, e.g. http://xxx/some.csv
+ file 'test_stddev_variance_window.csv'
+
+ time 10000 // limit inflight 10s
+
+ // stream load action will check result, include Success status, and NumberTotalRows == NumberLoadedRows
+
+ // if declared a check callback, the default check condition will ignore.
+ // So you must check all condition
+ check { result, exception, startTime, endTime ->
+ if (exception != null) {
+ throw exception
+ }
+ log.info("Stream load result: ${result}".toString())
+ def json = parseJson(result)
+ assertEquals("success", json.Status.toLowerCase())
+ assertEquals(json.NumberTotalRows, json.NumberLoadedRows)
+ assertTrue(json.NumberLoadedRows > 0 && json.LoadBytes > 0)
+ }
+ }
+ // Not Vectorized
+ sql """ set enable_vectorized_engine = false """
+
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ // vectorized
+ sql """ set enable_vectorized_engine = true """
+
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_pop(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, stddev_samp(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_pop(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, variance_samp(k2) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile(k2,0.8) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile(k2,0.8) over (partition by k6 order by k1) from ${tableName} order by k1;"
+
+ qt_select_default "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between 3 preceding and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between 3 preceding and 1 preceding) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between 3 preceding and 1 following) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between current row and current row) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1 rows between current row and unbounded following) from ${tableName} order by k1;"
+ qt_select_default "select k1, percentile_approx(k2,0.8,4096) over (partition by k6 order by k1) from ${tableName} order by k1;"
+}
+
+
+
+
+
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org