Skip to content

Commit 70bdf68

Browse files
seawindeYour Name
authored andcommitted
[fix](mtmv) Fix materialized view regression test err (#58018)
This PR aims to fix several failing regression tests related to Materialized Views (MTMV), ensuring the stability and correctness of the MTMV feature. The specific failing test cases addressed are: nereids_rules_p0.mv.pre_rewrite.limit.query_with_limit nested_materialized_view mv_tpch_test Related PR: #55066 #55674
1 parent 99dc707 commit 70bdf68

File tree

9 files changed

+23
-17
lines changed

9 files changed

+23
-17
lines changed

fe/fe-core/src/main/java/org/apache/doris/mtmv/MTMVPlanUtil.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,7 @@ public class MTMVPlanUtil {
111111
RuleType.ELIMINATE_JOIN_BY_UK,
112112
RuleType.ELIMINATE_GROUP_BY_KEY_BY_UNIFORM,
113113
RuleType.ELIMINATE_GROUP_BY,
114-
RuleType.SALT_JOIN,
115-
RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION
114+
RuleType.SALT_JOIN
116115
);
117116
// The rules should be disabled when run MTMV task
118117
public static final List<RuleType> DISABLE_RULES_WHEN_RUN_MTMV_TASK = DISABLE_RULES_WHEN_GENERATE_MTMV_CACHE;

fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ public class Rewriter extends AbstractBatchJobExecutor {
227227
// so there may be two filters we need to merge them
228228
new MergeFilters()
229229
),
230+
custom(RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION,
231+
AggScalarSubQueryToWindowFunction::new),
230232
bottomUp(
231233
new EliminateUselessPlanUnderApply(),
232234
// CorrelateApplyToUnCorrelateApply and ApplyToJoin
@@ -454,6 +456,7 @@ public class Rewriter extends AbstractBatchJobExecutor {
454456
// so there may be two filters we need to merge them
455457
new MergeFilters()
456458
),
459+
// query rewrite support window, so add this rule here
457460
custom(RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION, AggScalarSubQueryToWindowFunction::new),
458461
bottomUp(
459462
new EliminateUselessPlanUnderApply(),

fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PreMaterializedViewRewriter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ public class PreMaterializedViewRewriter {
6969
NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.PROCESS_SCALAR_AGG_MUST_USE_MULTI_DISTINCT.ordinal());
7070
NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.ELIMINATE_GROUP_BY_KEY_BY_UNIFORM.ordinal());
7171
NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.SALT_JOIN.ordinal());
72-
NEED_PRE_REWRITE_RULE_TYPES.set(RuleType.AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION.ordinal());
7372
}
7473

7574
/**

regression-test/suites/mv_p0/query_in_different_db/query_in_different_db.groovy

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,13 @@ suite ("query_in_different_db") {
4848
sql "insert into d_table select -4,-4,-4,'d';"
4949
sql "insert into d_table select -4,-4,-4,'d';"
5050

51+
sql "analyze table d_table with sync;"
52+
sql """alter table d_table modify column k1 set stats ('row_count'='12');"""
53+
5154
create_sync_mv(db, "d_table", "mv_in_${db}", """
5255
select abs(k1)+k2+1,sum(abs(k2+2)+k3+3) from d_table group by abs(k1)+k2+1
5356
""")
5457

55-
sql "analyze table d_table with sync;"
56-
sql """alter table d_table modify column k1 set stats ('row_count'='12');"""
5758
// use another db, mv rewrite should be correct
5859
sql """drop database IF EXISTS test_query_in_different_db"""
5960

regression-test/suites/nereids_rules_p0/mv/limit/limit_rewrite.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ suite("limit_rewrite") {
580580
where o_orderdate > '2023-12-08'
581581
limit 2 offset 5;
582582
"""
583-
async_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1")
583+
async_mv_rewrite_success(db, mv5_1, query5_1, "mv5_1")
584584
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1"""
585585

586586

@@ -606,7 +606,7 @@ suite("limit_rewrite") {
606606
where o_orderdate > '2023-12-09'
607607
limit 4 offset 2;
608608
"""
609-
async_mv_rewrite_fail(db, mv5_2, query5_2, "mv5_2")
609+
async_mv_rewrite_success(db, mv5_2, query5_2, "mv5_2")
610610
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_2"""
611611

612612

@@ -657,7 +657,7 @@ suite("limit_rewrite") {
657657
orders
658658
limit 2 offset 5;
659659
"""
660-
async_mv_rewrite_fail(db, mv6_1, query6_1, "mv6_1")
660+
async_mv_rewrite_success(db, mv6_1, query6_1, "mv6_1")
661661
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_1"""
662662

663663
}

regression-test/suites/nereids_rules_p0/mv/nested/nested_materialized_view.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -902,8 +902,8 @@ select * from (
902902
sql "SET enable_materialized_view_nest_rewrite = true"
903903
// DP Hyper can not use pre materialized view rewrite
904904
sql """SET enable_dphyp_optimizer = false"""
905-
mv_rewrite_all_success(query2_0, ["mv_all_6_a", "mv_all_6_b", "mv_all_6_c", "mv_all_6_d"],
906-
true, [TRY_IN_RBO, FORCE_IN_RBO])
905+
mv_rewrite_all_success_without_check_chosen(query2_0, ["mv_all_6_a", "mv_all_6_b", "mv_all_6_c", "mv_all_6_d"],
906+
[TRY_IN_RBO, FORCE_IN_RBO])
907907
mv_rewrite_all_fail(query2_0, ["mv_all_6_a", "mv_all_6_b", "mv_all_6_c", "mv_all_6_d"],
908908
[NOT_IN_RBO])
909909
// Compare result when before and after mv rewrite

regression-test/suites/nereids_rules_p0/mv/pre_rewrite/limit/query_with_limit.groovy

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,11 @@ suite("query_with_limit") {
326326
o_orderkey,
327327
l_partkey,
328328
l_suppkey
329+
order by l_orderkey
329330
limit 2 offset 3;
330331
"""
332+
// because query explain memo is too big without order by, so add order by
333+
// if query explain memo is too big fixed, then remove order by l_orderkey
331334
async_mv_rewrite_success(db, mv1_5, query1_5, "mv1_5", [TRY_IN_RBO, FORCE_IN_RBO])
332335
async_mv_rewrite_fail(db, mv1_5, query1_5, "mv1_5", [NOT_IN_RBO])
333336
sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_5"""
@@ -958,7 +961,7 @@ suite("query_with_limit") {
958961
orders on l_orderkey = o_orderkey
959962
limit 2 offset 1;
960963
"""
961-
async_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1")
964+
async_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1", [TRY_IN_RBO, FORCE_IN_RBO])
962965
sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1"""
963966

964967

regression-test/suites/nereids_rules_p0/mv/topN/topN_rewrite.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -593,7 +593,7 @@ suite("topN_rewrite") {
593593
limit 2 offset 5;
594594
"""
595595
order_qt_query5_1_before "${query5_1}"
596-
async_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1")
596+
async_mv_rewrite_success(db, mv5_1, query5_1, "mv5_1")
597597
order_qt_query5_1_after "${query5_1}"
598598
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1"""
599599

@@ -624,7 +624,7 @@ suite("topN_rewrite") {
624624
limit 4 offset 2;
625625
"""
626626
order_qt_query5_2_before "${query5_2}"
627-
async_mv_rewrite_fail(db, mv5_2, query5_2, "mv5_2")
627+
async_mv_rewrite_success(db, mv5_2, query5_2, "mv5_2")
628628
order_qt_query5_2_after "${query5_2}"
629629
sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_2"""
630630

@@ -683,7 +683,7 @@ suite("topN_rewrite") {
683683
limit 2 offset 5;
684684
"""
685685
order_qt_query6_1_before "${query6_1}"
686-
async_mv_rewrite_fail(db, mv6_1, query6_1, "mv6_1")
686+
async_mv_rewrite_success(db, mv6_1, query6_1, "mv6_1")
687687
order_qt_query6_1_after "${query6_1}"
688688
sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_1"""
689689

regression-test/suites/nereids_rules_p0/mv/tpch/mv_tpch_test.groovy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,12 +1231,13 @@ suite("mv_tpch_test") {
12311231
l_partkey = p_partkey
12321232
)
12331233
"""
1234-
// contains subquery, doesn't support now
1235-
async_mv_rewrite_success(db, mv17, query17, "mv17")
1234+
// agg under join should rewrite successfully,
1235+
// but because AGG_SCALAR_SUBQUERY_TO_WINDOW_FUNCTION rule
1236+
// would rewrite to agg-window-join, so now doesn't support
1237+
async_mv_rewrite_fail(db, mv17, query17, "mv17")
12361238
order_qt_query17_after "${query17}"
12371239
sql """ DROP MATERIALIZED VIEW IF EXISTS mv17"""
12381240

1239-
12401241
def mv18 = """
12411242
SELECT
12421243
c_name,

0 commit comments

Comments
 (0)