You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2024/03/26 12:31:26 UTC
(doris) 02/06: [improvement](mtmv) Support hll function roll up when query rewrite by materialized view (#32431)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git
commit 1b6b92a19db8ba0dbf40a8da7a786acb8a421609
Author: seawinde <14...@users.noreply.github.com>
AuthorDate: Tue Mar 26 17:10:34 2024 +0800
[improvement](mtmv) Support hll function roll up when query rewrite by materialized view (#32431)
Support hll roll up, the hll fucntion supportd is as following:
+-----------------------------------------------------------------------------------------------------------------------------------------------------+
| in query | in materialized view | rolluped |
+ ------------------------------------------------ + ----------------------------------------------------------------------- + ---------------------- +
| HLL_UNION_AGG(hll column) | hll_union(column) or hll_raw_agg(column) as column1 | HLL_UNION_AGG(column1) |
| HLL_RAW_AGG(hll column) or HLL_UNION(hll column) | | HLL_UNION(column) |
| approx_count_distinct(not hll column) | hll_union(HLL_HASH(column)) or hll_raw_agg(HLL_HASH(column)) as column1 | HLL_UNION_AGG(column1) |
| HLL_UNION_AGG(HLL_HASH(column)) | | HLL_UNION_AGG(column) |
| hll_cardinality(hll_union(HLL_HASH(column))) | hll_union(HLL_HASH(column)) or hll_raw_agg(HLL_HASH(column)) as column1 | |
| hll_cardinality(hll_raw_agg(HLL_HASH(column))) | hll_union(HLL_HASH(column)) or hll_raw_agg(HLL_HASH(column)) as column1 | |
| HLL_RAW_AGG(HLL_HASH(column)) | hll_union(HLL_HASH(column)) or hll_raw_agg(HLL_HASH(column)) as column1 | HLL_RAW_AGG(column1) |
+-----------------------------------------------------------------------------------------------------------------------------------------------------+
---
.../mv/AbstractMaterializedViewAggregateRule.java | 73 ++++++++++++++++--
.../expressions/functions/agg/CouldRollUp.java | 4 +-
.../trees/expressions/functions/agg/HllUnion.java | 8 +-
.../expressions/functions/agg/HllUnionAgg.java | 8 +-
.../trees/expressions/functions/agg/Ndv.java | 8 +-
.../functions/scalar/HllCardinality.java | 10 ++-
.../mv/agg_with_roll_up/aggregate_with_roll_up.out | 28 +++++++
.../agg_with_roll_up/aggregate_with_roll_up.groovy | 86 ++++++++++++++++++++++
8 files changed, 215 insertions(+), 10 deletions(-)
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
index 915b854156f..5cd2fb769b7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
@@ -34,6 +34,11 @@ import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnion;
import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnionCount;
import org.apache.doris.nereids.trees.expressions.functions.agg.CouldRollUp;
import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
+import org.apache.doris.nereids.trees.expressions.functions.agg.HllUnion;
+import org.apache.doris.nereids.trees.expressions.functions.agg.HllUnionAgg;
+import org.apache.doris.nereids.trees.expressions.functions.agg.Ndv;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.HllCardinality;
+import org.apache.doris.nereids.trees.expressions.functions.scalar.HllHash;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ToBitmap;
import org.apache.doris.nereids.trees.expressions.visitor.DefaultExpressionRewriter;
import org.apache.doris.nereids.trees.plans.Plan;
@@ -41,6 +46,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.trees.plans.visitor.ExpressionLineageReplacer;
import org.apache.doris.nereids.types.BigIntType;
+import org.apache.doris.nereids.types.VarcharType;
import org.apache.doris.nereids.util.ExpressionUtils;
import com.google.common.collect.ArrayListMultimap;
@@ -70,20 +76,20 @@ public abstract class AbstractMaterializedViewAggregateRule extends AbstractMate
new AggregateExpressionRewriter();
static {
- // support count distinct roll up
- // with bitmap_union and to_bitmap
+ // support roll up when count distinct is in query
+ // the column type is not bitMap
AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new Count(true, Any.INSTANCE),
new BitmapUnion(new ToBitmap(Any.INSTANCE)));
// with bitmap_union, to_bitmap and cast
AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new Count(true, Any.INSTANCE),
new BitmapUnion(new ToBitmap(new Cast(Any.INSTANCE, BigIntType.INSTANCE))));
- // support bitmap_union_count roll up
- // field is already bitmap with only bitmap_union
+ // support roll up when bitmap_union_count is in query
+ // the column type is bitMap
AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
new BitmapUnionCount(Any.INSTANCE),
new BitmapUnion(Any.INSTANCE));
- // with bitmap_union and to_bitmap
+ // the column type is not bitMap
AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
new BitmapUnionCount(new ToBitmap(Any.INSTANCE)),
new BitmapUnion(new ToBitmap(Any.INSTANCE)));
@@ -91,6 +97,63 @@ public abstract class AbstractMaterializedViewAggregateRule extends AbstractMate
AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
new BitmapUnionCount(new ToBitmap(new Cast(Any.INSTANCE, BigIntType.INSTANCE))),
new BitmapUnion(new ToBitmap(new Cast(Any.INSTANCE, BigIntType.INSTANCE))));
+
+ // support roll up when the column type is not hll
+ // query is approx_count_distinct
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new Ndv(Any.INSTANCE),
+ new HllUnion(new HllHash(Any.INSTANCE)));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new Ndv(Any.INSTANCE),
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))));
+
+ // query is HLL_UNION_AGG
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllUnionAgg(new HllHash(Any.INSTANCE)),
+ new HllUnion(new HllHash(Any.INSTANCE)));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllUnionAgg(new HllHash(Any.INSTANCE)),
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
+ new HllUnionAgg(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))),
+ new HllUnion(new HllHash(Any.INSTANCE)));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
+ new HllUnionAgg(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))),
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))));
+
+ // query is HLL_CARDINALITY
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllCardinality(new HllUnion(new HllHash(Any.INSTANCE))),
+ new HllUnion(new HllHash(Any.INSTANCE)));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllCardinality(new HllUnion(new HllHash(Any.INSTANCE))),
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
+ new HllCardinality(new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT)))),
+ new HllUnion(new HllHash(Any.INSTANCE)));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
+ new HllCardinality(new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT)))),
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))));
+
+ // query is HLL_RAW_AGG or HLL_UNION
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllUnion(new HllHash(Any.INSTANCE)),
+ new HllUnion(new HllHash(Any.INSTANCE)));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllUnion(new HllHash(Any.INSTANCE)),
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))),
+ new HllUnion(new HllHash(Any.INSTANCE)));
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))),
+ new HllUnion(new HllHash(new Cast(Any.INSTANCE, VarcharType.SYSTEM_DEFAULT))));
+
+ // support roll up when the column type is hll
+ // query is HLL_UNION_AGG
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllUnionAgg(Any.INSTANCE),
+ new HllUnion(Any.INSTANCE));
+
+ // query is HLL_CARDINALITY
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllCardinality(new HllUnion(Any.INSTANCE)),
+ new HllUnion(Any.INSTANCE));
+
+ // query is HLL_RAW_AGG or HLL_UNION
+ AGGREGATE_ROLL_UP_EQUIVALENT_FUNCTION_MAP.put(new HllUnion(Any.INSTANCE),
+ new HllUnion(Any.INSTANCE));
+
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CouldRollUp.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CouldRollUp.java
index b3e1674d3ed..7004c16804a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CouldRollUp.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CouldRollUp.java
@@ -21,7 +21,9 @@ import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.Function;
/**
- * Could roll up trait, if a function could roll up in aggregate, it will implement the interface
+ * Could roll up trait, it could be rolled up if a function appear in query which can be represented
+ * by aggregate function in view.
+ * Acquire the rolled up function by constructRollUp method.
*/
public interface CouldRollUp {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnion.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnion.java
index 3c1eea6ea7f..08c091f7402 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnion.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnion.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.functions.Function;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.DataType;
@@ -35,7 +36,7 @@ import java.util.List;
* AggregateFunction 'hll_union'. This class is generated by GenerateFunction.
*/
public class HllUnion extends AggregateFunction
- implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable, HllFunction {
+ implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable, HllFunction, CouldRollUp {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(HllType.INSTANCE).args(HllType.INSTANCE)
@@ -78,4 +79,9 @@ public class HllUnion extends AggregateFunction
public List<FunctionSignature> getSignatures() {
return SIGNATURES;
}
+
+ @Override
+ public Function constructRollUp(Expression param, Expression... varParams) {
+ return new HllUnion(param);
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnionAgg.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnionAgg.java
index 635901cb08a..65ba8d44787 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnionAgg.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/HllUnionAgg.java
@@ -21,6 +21,7 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.functions.Function;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -36,7 +37,7 @@ import java.util.List;
* AggregateFunction 'hll_union_agg'. This class is generated by GenerateFunction.
*/
public class HllUnionAgg extends AggregateFunction
- implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable, HllFunction {
+ implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable, HllFunction, CouldRollUp {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE).args(HllType.INSTANCE)
@@ -79,4 +80,9 @@ public class HllUnionAgg extends AggregateFunction
public List<FunctionSignature> getSignatures() {
return SIGNATURES;
}
+
+ @Override
+ public Function constructRollUp(Expression param, Expression... varParams) {
+ return new HllUnionAgg(param);
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Ndv.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Ndv.java
index 08503bf887c..830d9214ec4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Ndv.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/Ndv.java
@@ -23,6 +23,7 @@ import org.apache.doris.nereids.exceptions.AnalysisException;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.functions.Function;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -37,7 +38,7 @@ import java.util.List;
* AggregateFunction 'ndv'. This class is generated by GenserateFunction.
*/
public class Ndv extends AggregateFunction
- implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable {
+ implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable, CouldRollUp {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE).args(AnyDataType.INSTANCE_WITHOUT_INDEX)
@@ -79,4 +80,9 @@ public class Ndv extends AggregateFunction
public List<FunctionSignature> getSignatures() {
return SIGNATURES;
}
+
+ @Override
+ public Function constructRollUp(Expression param, Expression... varParams) {
+ return new HllUnionAgg(param);
+ }
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HllCardinality.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HllCardinality.java
index 99783491268..f22fe7dfcdc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HllCardinality.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/scalar/HllCardinality.java
@@ -21,7 +21,10 @@ import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable;
import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
+import org.apache.doris.nereids.trees.expressions.functions.Function;
+import org.apache.doris.nereids.trees.expressions.functions.agg.CouldRollUp;
import org.apache.doris.nereids.trees.expressions.functions.agg.HllFunction;
+import org.apache.doris.nereids.trees.expressions.functions.agg.HllUnionAgg;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.BigIntType;
@@ -36,7 +39,7 @@ import java.util.List;
* ScalarFunction 'hll_cardinality'. This class is generated by GenerateFunction.
*/
public class HllCardinality extends ScalarFunction
- implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable, HllFunction {
+ implements UnaryExpression, ExplicitlyCastableSignature, AlwaysNotNullable, HllFunction, CouldRollUp {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(BigIntType.INSTANCE).args(HllType.INSTANCE)
@@ -67,4 +70,9 @@ public class HllCardinality extends ScalarFunction
public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
return visitor.visitHllCardinality(this, context);
}
+
+ @Override
+ public Function constructRollUp(Expression param, Expression... varParams) {
+ return new HllUnionAgg(param);
+ }
}
diff --git a/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out b/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out
index 8a1f3fb70d9..b95c3521918 100644
--- a/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out
+++ b/regression-test/data/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.out
@@ -217,6 +217,34 @@
2 3 2023-12-12 57.40 60.40
2 4 2023-12-10 46.00 50.00
+-- !query25_5_before --
+2 3 2023-12-08 20.00 10.50 9.50 1 1 1 1 1 \N \N
+2 3 2023-12-12 57.40 56.20 1.20 1 1 1 1 1 \N \N
+2 4 2023-12-10 46.00 33.50 12.50 1 1 1 1 1 \N \N
+3 3 2023-12-11 43.20 43.20 43.20 1 1 1 1 1 \N \N
+4 3 2023-12-09 11.50 11.50 11.50 1 1 1 1 1 \N \N
+
+-- !query25_5_after --
+2 3 2023-12-08 20.00 10.50 9.50 1 1 1 1 1 \N \N
+2 3 2023-12-12 57.40 56.20 1.20 1 1 1 1 1 \N \N
+2 4 2023-12-10 46.00 33.50 12.50 1 1 1 1 1 \N \N
+3 3 2023-12-11 43.20 43.20 43.20 1 1 1 1 1 \N \N
+4 3 2023-12-09 11.50 11.50 11.50 1 1 1 1 1 \N \N
+
+-- !query25_6_before --
+2 3 2023-12-08 20.00 10.50 9.50 1 1 1 1 1 \N \N
+2 3 2023-12-12 57.40 56.20 1.20 0 0 0 0 0 \N \N
+2 4 2023-12-10 46.00 33.50 12.50 1 1 1 1 1 \N \N
+3 3 2023-12-11 43.20 43.20 43.20 0 0 0 0 0 \N \N
+4 3 2023-12-09 11.50 11.50 11.50 0 0 0 0 0 \N \N
+
+-- !query25_6_after --
+2 3 2023-12-08 20.00 10.50 9.50 1 1 1 1 1 \N \N
+2 3 2023-12-12 57.40 56.20 1.20 0 0 0 0 0 \N \N
+2 4 2023-12-10 46.00 33.50 12.50 1 1 1 1 1 \N \N
+3 3 2023-12-11 43.20 43.20 43.20 0 0 0 0 0 \N \N
+4 3 2023-12-09 11.50 11.50 11.50 0 0 0 0 0 \N \N
+
-- !query1_1_before --
1 yy 0 0 11.50 11.50 11.50 1
diff --git a/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy b/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy
index b314927636b..01672af1be0 100644
--- a/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy
+++ b/regression-test/suites/nereids_rules_p0/mv/agg_with_roll_up/aggregate_with_roll_up.groovy
@@ -916,6 +916,92 @@ suite("aggregate_with_roll_up") {
order_qt_query25_4_after "${query25_4}"
sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_4"""
+ // hll roll up with column
+ def mv25_5 =
+ """
+ select l_shipdate, o_orderdate, l_partkey, l_suppkey,
+ sum(o_totalprice) as sum_total,
+ max(o_totalprice) as max_total,
+ min(o_totalprice) as min_total,
+ bitmap_union(to_bitmap(l_partkey)),
+ hll_union(hll_hash(l_partkey))
+ from lineitem
+ left join orders on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """
+
+ def query25_5 =
+ """
+ select l_partkey, l_suppkey, o_orderdate,
+ sum(o_totalprice),
+ max(o_totalprice),
+ min(o_totalprice),
+ count(distinct l_partkey),
+ approx_count_distinct(l_partkey),
+ hll_union_agg(hll_hash(l_partkey)),
+ hll_cardinality(hll_union(hll_hash(l_partkey))),
+ hll_cardinality(hll_raw_agg(hll_hash(l_partkey))),
+ hll_raw_agg(hll_hash(l_partkey)),
+ hll_union(hll_hash(l_partkey))
+ from lineitem
+ left join orders on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """
+ order_qt_query25_5_before "${query25_5}"
+ check_mv_rewrite_success(db, mv25_5, query25_5, "mv25_5")
+ order_qt_query25_5_after "${query25_5}"
+ sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_5"""
+
+ // hll roll up with complex expression
+ def mv25_6 =
+ """
+ select l_shipdate, o_orderdate, l_partkey, l_suppkey,
+ sum(o_totalprice) as sum_total,
+ max(o_totalprice) as max_total,
+ min(o_totalprice) as min_total,
+ bitmap_union(to_bitmap(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end)),
+ hll_union(hll_hash(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end))
+ from lineitem
+ left join orders on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ l_shipdate,
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """
+
+ def query25_6 =
+ """
+ select l_partkey, l_suppkey, o_orderdate,
+ sum(o_totalprice),
+ max(o_totalprice),
+ min(o_totalprice),
+ count(distinct case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end) as count_1,
+ approx_count_distinct(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end) as count_2,
+ hll_union_agg(hll_hash(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end)) as count_3,
+ hll_cardinality(hll_union(hll_hash(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end))) as count_4,
+ hll_cardinality(hll_raw_agg(hll_hash(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end))) as count_5,
+ hll_raw_agg(hll_hash(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end)) as count_6,
+ hll_union(hll_hash(case when o_shippriority > 0 and o_orderkey IN (1, 3) then o_custkey else null end)) as count_7
+ from lineitem
+ left join orders on l_orderkey = o_orderkey and l_shipdate = o_orderdate
+ group by
+ o_orderdate,
+ l_partkey,
+ l_suppkey;
+ """
+ order_qt_query25_6_before "${query25_6}"
+ check_mv_rewrite_success(db, mv25_6, query25_6, "mv25_6")
+ order_qt_query25_6_after "${query25_6}"
+ sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_6"""
+
// single table
// filter + use roll up dimension
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org