From 5dff9362432be558c8d84f150a10f33eb76c54c3 Mon Sep 17 00:00:00 2001 From: kangkaisen Date: Fri, 3 Jan 2020 19:23:56 +0800 Subject: [PATCH] Fix HLL_UNION_AGG AnalyticFn result in BE core by adding hll_get_value (#2653) --- be/src/exprs/hll_function.cpp | 6 ++++++ be/src/exprs/hll_function.h | 4 ++++ fe/src/main/java/org/apache/doris/catalog/FunctionSet.java | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/be/src/exprs/hll_function.cpp b/be/src/exprs/hll_function.cpp index 7731c60a4f..e18f177429 100644 --- a/be/src/exprs/hll_function.cpp +++ b/be/src/exprs/hll_function.cpp @@ -80,6 +80,12 @@ BigIntVal HllFunctions::hll_finalize(FunctionContext*, const StringVal &src) { return result; } +BigIntVal HllFunctions::hll_get_value(FunctionContext*, const StringVal &src) { + auto* src_hll = reinterpret_cast(src.ptr); + BigIntVal result(src_hll->estimate_cardinality()); + return result; +} + BigIntVal HllFunctions::hll_cardinality(FunctionContext* ctx, const StringVal& input) { if (input.is_null) { return BigIntVal::null(); diff --git a/be/src/exprs/hll_function.h b/be/src/exprs/hll_function.h index 9b25531762..e757204437 100644 --- a/be/src/exprs/hll_function.h +++ b/be/src/exprs/hll_function.h @@ -36,6 +36,10 @@ public: static BigIntVal hll_finalize(FunctionContext*, const StringVal& src); + // Get the hll cardinality, the difference from hll_finalize method is + // hll_get_value method doesn't free memory + static BigIntVal hll_get_value(FunctionContext*, const StringVal& src); + static StringVal hll_serialize(FunctionContext* ctx, const StringVal& src); static BigIntVal hll_cardinality(FunctionContext* ctx, const StringVal& src); diff --git a/fe/src/main/java/org/apache/doris/catalog/FunctionSet.java b/fe/src/main/java/org/apache/doris/catalog/FunctionSet.java index a1a4a272fc..c49cfaa0fe 100644 --- a/fe/src/main/java/org/apache/doris/catalog/FunctionSet.java +++ b/fe/src/main/java/org/apache/doris/catalog/FunctionSet.java @@ -1000,7 +1000,7 @@ public class FunctionSet { HLL_UNION_AGG_UPDATE_SYMBOL.get(t), "_ZN5doris12HllFunctions9hll_mergeEPN9doris_udf15FunctionContextERKNS1_9StringValEPS4_", "_ZN5doris12HllFunctions13hll_serializeEPN9doris_udf15FunctionContextERKNS1_9StringValE", - "_ZN5doris12HllFunctions12hll_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE", + "_ZN5doris12HllFunctions13hll_get_valueEPN9doris_udf15FunctionContextERKNS1_9StringValE", null, "_ZN5doris12HllFunctions12hll_finalizeEPN9doris_udf15FunctionContextERKNS1_9StringValE", true, true, true));