From ccbcf879b5876aa306d7da44aea8ccadcb685fbb Mon Sep 17 00:00:00 2001 From: seawinde <149132972+seawinde@users.noreply.github.com> Date: Sun, 4 Feb 2024 14:39:17 +0800 Subject: [PATCH] [test](mtmv) Add materialized view availability regression test (#30769) Add materialized view availability regression test when mv refresh_time is in the grace_period(unit is second), materialized view will be use to query rewrite regardless of the base table is update or not when mv refresh_time is out of the grace_period(unit is second), will check the base table is update or not if update the materialized view will not be used to query rewrite --- .../rules/exploration/mv/StructInfo.java | 5 +- .../doris/regression/suite/Suite.groovy | 38 ++ .../aggregate_with_roll_up.groovy | 92 +--- .../aggregate_without_roll_up.groovy | 90 +--- .../mv/availability/grace_period.groovy | 489 ++++++++++++++++++ .../materialized_view_switch.groovy | 155 ++++++ .../join/dphyp_inner/inner_join_dphyp.groovy | 78 +-- .../join/dphyp_outer/outer_join_dphyp.groovy | 76 +-- .../mv/join/inner/inner_join.groovy | 78 +-- .../mv/join/left_outer/outer_join.groovy | 80 +-- .../mv/ssb/mv_ssb_test.groovy | 65 +-- 11 files changed, 831 insertions(+), 415 deletions(-) create mode 100644 regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy create mode 100644 regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java index 6a5c82691e..af874d37b1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/StructInfo.java @@ -177,8 +177,9 @@ public class StructInfo { nodePlan.accept(RELATION_COLLECTOR, nodeRelations); relationBuilder.addAll(nodeRelations); // every node should only have one relation, this is for LogicalCompatibilityContext - relationIdStructInfoNodeMap.put(nodeRelations.get(0).getRelationId(), (StructInfoNode) node); - + if (!nodeRelations.isEmpty()) { + relationIdStructInfoNodeMap.put(nodeRelations.get(0).getRelationId(), (StructInfoNode) node); + } // record expressions in node if (structInfoNode.getExpressions() != null) { structInfoNode.getExpressions().forEach(expression -> { diff --git a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy index 97dcb879b0..b5dde91419 100644 --- a/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy +++ b/regression-test/framework/src/main/groovy/org/apache/doris/regression/suite/Suite.groovy @@ -1032,4 +1032,42 @@ class Suite implements GroovyInterceptable { return result.values().toList() } + + def check_mv_rewrite_success = { db, mv_sql, query_sql, mv_name -> + + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" + sql""" + CREATE MATERIALIZED VIEW ${mv_name} + BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL + DISTRIBUTED BY RANDOM BUCKETS 2 + PROPERTIES ('replication_num' = '1') + AS ${mv_sql} + """ + + def job_name = getJobName(db, mv_name); + waitingMTMVTaskFinished(job_name) + explain { + sql("${query_sql}") + contains("${mv_name}(${mv_name})") + } + } + + def check_mv_rewrite_fail = { db, mv_sql, query_sql, mv_name -> + + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" + sql""" + CREATE MATERIALIZED VIEW ${mv_name} + BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL + DISTRIBUTED BY RANDOM BUCKETS 2 + PROPERTIES ('replication_num' = '1') + AS ${mv_sql} + """ + + def job_name = getJobName(db, mv_name); + waitingMTMVTaskFinished(job_name) + explain { + sql("${query_sql}") + notContains("${mv_name}(${mv_name})") + } + } } 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 eb4657f786..bc2d9f1352 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 @@ -132,25 +132,6 @@ suite("aggregate_with_roll_up") { (2, 3, 10, 11.01, 'supply2'); """ - def check_rewrite = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - contains("${mv_name}(${mv_name})") - } - } - def check_rewrite_with_mv_partition = { mv_sql, query_sql, mv_name, partition_column -> sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" @@ -193,25 +174,6 @@ suite("aggregate_with_roll_up") { } } - def check_not_match = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - notContains("${mv_name}(${mv_name})") - } - } - // multi table // filter inside + left + use roll up dimension def mv13_0 = "select l_shipdate, o_orderdate, l_partkey, l_suppkey, " + @@ -240,7 +202,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query13_0_before "${query13_0}" - check_rewrite(mv13_0, query13_0, "mv13_0") + check_mv_rewrite_success(db, mv13_0, query13_0, "mv13_0") order_qt_query13_0_after "${query13_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv13_0""" @@ -275,7 +237,7 @@ suite("aggregate_with_roll_up") { l_suppkey; """ order_qt_query13_1_before "${query13_1}" - check_not_match(mv13_1, query13_1, "mv13_1") + check_mv_rewrite_fail(db, mv13_1, query13_1, "mv13_1") order_qt_query13_1_after "${query13_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv13_1""" @@ -309,7 +271,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query14_0_before "${query14_0}" - check_rewrite(mv14_0, query14_0, "mv14_0") + check_mv_rewrite_success(db, mv14_0, query14_0, "mv14_0") order_qt_query14_0_after "${query14_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv14_0""" @@ -415,7 +377,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query16_0_before "${query16_0}" - check_rewrite(mv16_0, query16_0, "mv16_0") + check_mv_rewrite_success(db, mv16_0, query16_0, "mv16_0") order_qt_query16_0_after "${query16_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv16_0""" @@ -450,7 +412,7 @@ suite("aggregate_with_roll_up") { l_suppkey; """ order_qt_query17_0_before "${query17_0}" - check_rewrite(mv17_0, query17_0, "mv17_0") + check_mv_rewrite_success(db, mv17_0, query17_0, "mv17_0") order_qt_query17_0_after "${query17_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv17_0""" @@ -481,7 +443,7 @@ suite("aggregate_with_roll_up") { "l_shipdate, " + "l_suppkey" order_qt_query18_0_before "${query18_0}" - check_rewrite(mv18_0, query18_0, "mv18_0") + check_mv_rewrite_success(db, mv18_0, query18_0, "mv18_0") order_qt_query18_0_after "${query18_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_0""" @@ -503,7 +465,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query19_0_before "${query19_0}" - check_rewrite(mv19_0, query19_0, "mv19_0") + check_mv_rewrite_success(db, mv19_0, query19_0, "mv19_0") order_qt_query19_0_after "${query19_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_0""" @@ -534,7 +496,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query19_1_before "${query19_1}" - check_rewrite(mv19_1, query19_1, "mv19_1") + check_mv_rewrite_success(db, mv19_1, query19_1, "mv19_1") order_qt_query19_1_after "${query19_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_1""" @@ -568,7 +530,7 @@ suite("aggregate_with_roll_up") { "o_orderdate, " + "l_suppkey" order_qt_query20_0_before "${query20_0}" - check_rewrite(mv20_0, query20_0, "mv20_0") + check_mv_rewrite_success(db, mv20_0, query20_0, "mv20_0") order_qt_query20_0_after "${query20_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_0""" @@ -608,7 +570,7 @@ suite("aggregate_with_roll_up") { l_suppkey; """ order_qt_query20_1_before "${query20_1}" - check_rewrite(mv20_1, query20_1, "mv20_1") + check_mv_rewrite_success(db, mv20_1, query20_1, "mv20_1") order_qt_query20_1_after "${query20_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_1""" @@ -642,7 +604,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query21_0_before "${query21_0}" - check_rewrite(mv21_0, query21_0, "mv21_0") + check_mv_rewrite_success(db, mv21_0, query21_0, "mv21_0") order_qt_query21_0_after "${query21_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_0""" @@ -675,7 +637,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query22_0_before "${query22_0}" - check_rewrite(mv22_0, query22_0, "mv22_0") + check_mv_rewrite_success(db, mv22_0, query22_0, "mv22_0") order_qt_query22_0_after "${query22_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv22_0""" @@ -708,7 +670,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query22_1_before "${query22_1}" - check_rewrite(mv22_1, query22_1, "mv22_1") + check_mv_rewrite_success(db, mv22_1, query22_1, "mv22_1") order_qt_query22_1_after "${query22_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv22_1""" @@ -742,7 +704,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query23_0_before "${query23_0}" - check_rewrite(mv23_0, query23_0, "mv23_0") + check_mv_rewrite_success(db, mv23_0, query23_0, "mv23_0") order_qt_query23_0_after "${query23_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv23_0""" @@ -774,7 +736,7 @@ suite("aggregate_with_roll_up") { "l_shipdate, " + "l_suppkey" order_qt_query24_0_before "${query24_0}" - check_rewrite(mv24_0, query24_0, "mv24_0") + check_mv_rewrite_success(db, mv24_0, query24_0, "mv24_0") order_qt_query24_0_after "${query24_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv24_0""" @@ -805,7 +767,7 @@ suite("aggregate_with_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query25_0_before "${query25_0}" - check_rewrite(mv25_0, query25_0, "mv25_0") + check_mv_rewrite_success(db, mv25_0, query25_0, "mv25_0") order_qt_query25_0_after "${query25_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_0""" @@ -842,7 +804,7 @@ suite("aggregate_with_roll_up") { l_suppkey; """ order_qt_query25_1_before "${query25_1}" - check_rewrite(mv25_1, query25_1, "mv25_1") + check_mv_rewrite_success(db, mv25_1, query25_1, "mv25_1") order_qt_query25_1_after "${query25_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_1""" @@ -881,7 +843,7 @@ suite("aggregate_with_roll_up") { l_suppkey; """ order_qt_query25_2_before "${query25_2}" - check_rewrite(mv25_2, query25_2, "mv25_2") + check_mv_rewrite_success(db, mv25_2, query25_2, "mv25_2") order_qt_query25_2_after "${query25_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_2""" @@ -922,7 +884,7 @@ suite("aggregate_with_roll_up") { l_suppkey + l_partkey; """ order_qt_query25_3_before "${query25_3}" - check_rewrite(mv25_3, query25_3, "mv25_3") + check_mv_rewrite_success(db, mv25_3, query25_3, "mv25_3") order_qt_query25_3_after "${query25_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_3""" @@ -950,7 +912,7 @@ suite("aggregate_with_roll_up") { """ order_qt_query25_4_before "${query25_4}" - check_rewrite(mv25_4, query25_4, "mv25_4") + check_mv_rewrite_success(db, mv25_4, query25_4, "mv25_4") order_qt_query25_4_after "${query25_4}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv25_4""" @@ -1056,7 +1018,7 @@ suite("aggregate_with_roll_up") { o_shippriority; """ order_qt_query26_0_before "${query26_0}" - check_not_match(mv26_0, query26_0, "mv26_0") + check_mv_rewrite_fail(db, mv26_0, query26_0, "mv26_0") order_qt_query26_0_after "${query26_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv26_0""" @@ -1090,7 +1052,7 @@ suite("aggregate_with_roll_up") { o_shippriority; """ order_qt_query27_0_before "${query27_0}" - check_not_match(mv27_0, query27_0, "mv27_0") + check_mv_rewrite_fail(db, mv27_0, query27_0, "mv27_0") order_qt_query27_0_after "${query27_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv27_0""" @@ -1131,7 +1093,7 @@ suite("aggregate_with_roll_up") { limit 10; """ order_qt_query28_0_before "${query28_0}" - check_rewrite(mv28_0, query28_0, "mv28_0") + check_mv_rewrite_success(db, mv28_0, query28_0, "mv28_0") order_qt_query28_0_after "${query28_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv28_0""" @@ -1160,7 +1122,7 @@ suite("aggregate_with_roll_up") { ) as t; """ order_qt_query29_0_before "${query29_0}" - check_rewrite(mv29_0, query29_0, "mv29_0") + check_mv_rewrite_success(db, mv29_0, query29_0, "mv29_0") order_qt_query29_0_after "${query29_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv29_0""" @@ -1187,7 +1149,7 @@ suite("aggregate_with_roll_up") { """ order_qt_query29_1_before "${query29_1}" - check_rewrite(mv29_1, query29_1, "mv29_1") + check_mv_rewrite_success(db, mv29_1, query29_1, "mv29_1") order_qt_query29_1_after "${query29_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv29_1""" @@ -1213,7 +1175,7 @@ suite("aggregate_with_roll_up") { left join orders on l_orderkey = o_orderkey and l_shipdate = o_orderdate; """ order_qt_query29_2_before "${query29_2}" - check_rewrite(mv29_2, query29_2, "mv29_2") + check_mv_rewrite_success(db, mv29_2, query29_2, "mv29_2") order_qt_query29_2_after "${query29_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv29_2""" @@ -1260,7 +1222,7 @@ suite("aggregate_with_roll_up") { group by l_linenumber; """ order_qt_query30_0_before "${query30_0}" - check_not_match(mv30_0, query30_0, "mv30_0") + check_mv_rewrite_fail(db, mv30_0, query30_0, "mv30_0") order_qt_query30_0_after "${query30_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv30_0""" } diff --git a/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy b/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy index 07675365fc..95ea99bc19 100644 --- a/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/agg_without_roll_up/aggregate_without_roll_up.groovy @@ -134,44 +134,6 @@ suite("aggregate_without_roll_up") { (2, 3, 10, 11.01, 'supply2'); """ - def check_rewrite = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - contains("${mv_name}(${mv_name})") - } - } - - def check_not_match = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - notContains("${mv_name}(${mv_name})") - } - } - // single table // with filter def mv1_0 = "select o_shippriority, o_comment, " + @@ -198,7 +160,7 @@ suite("aggregate_without_roll_up") { "o_shippriority, " + "o_comment " order_qt_query1_0_before "${query1_0}" - check_rewrite(mv1_0, query1_0, "mv1_0") + check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0") order_qt_query1_0_after "${query1_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0""" @@ -253,7 +215,7 @@ suite("aggregate_without_roll_up") { "O_SHIPPRIORITY, " + "O_COMMENT " order_qt_query1_1_before "${query1_1}" - check_rewrite(mv1_1, query1_1, "mv1_1") + check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1") order_qt_query1_1_after "${query1_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1""" @@ -306,7 +268,7 @@ suite("aggregate_without_roll_up") { "O_SHIPPRIORITY, " + "O_COMMENT " order_qt_query1_2_before "${query1_2}" - check_rewrite(mv1_2, query1_2, "mv1_2") + check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2") order_qt_query1_2_after "${query1_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2""" @@ -353,7 +315,7 @@ suite("aggregate_without_roll_up") { "O_SHIPPRIORITY, " + "O_COMMENT " order_qt_query2_0_before "${query2_0}" - check_rewrite(mv2_0, query2_0, "mv2_0") + check_mv_rewrite_success(db, mv2_0, query2_0, "mv2_0") order_qt_query2_0_after "${query2_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0""" @@ -400,7 +362,7 @@ suite("aggregate_without_roll_up") { "from orders " + "where O_ORDERDATE < '2023-12-30' and O_ORDERDATE > '2023-12-01'" order_qt_query3_0_before "${query3_0}" - check_rewrite(mv3_0, query3_0, "mv3_0") + check_mv_rewrite_success(db, mv3_0, query3_0, "mv3_0") order_qt_query3_0_after "${query3_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0""" @@ -432,7 +394,7 @@ suite("aggregate_without_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query13_0_before "${query13_0}" - check_rewrite(mv13_0, query13_0, "mv13_0") + check_mv_rewrite_success(db, mv13_0, query13_0, "mv13_0") order_qt_query13_0_after "${query13_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv13_0""" @@ -465,7 +427,7 @@ suite("aggregate_without_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query14_0_before "${query14_0}" - check_rewrite(mv14_0, query14_0, "mv14_0") + check_mv_rewrite_success(db, mv14_0, query14_0, "mv14_0") order_qt_query14_0_after "${query14_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv14_0""" @@ -498,7 +460,7 @@ suite("aggregate_without_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query15_0_before "${query15_0}" - check_rewrite(mv15_0, query15_0, "mv15_0") + check_mv_rewrite_success(db, mv15_0, query15_0, "mv15_0") order_qt_query15_0_after "${query15_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv15_0""" @@ -535,7 +497,7 @@ suite("aggregate_without_roll_up") { l_suppkey; """ order_qt_query15_1_before "${query15_1}" - check_rewrite(mv15_1, query15_1, "mv15_1") + check_mv_rewrite_success(db, mv15_1, query15_1, "mv15_1") order_qt_query15_0_after "${query15_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv15_1""" @@ -566,7 +528,7 @@ suite("aggregate_without_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query16_0_before "${query16_0}" - check_rewrite(mv16_0, query16_0, "mv16_0") + check_mv_rewrite_success(db, mv16_0, query16_0, "mv16_0") order_qt_query16_0_after "${query16_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv16_0""" @@ -600,7 +562,7 @@ suite("aggregate_without_roll_up") { l_suppkey; """ order_qt_query16_1_before "${query16_1}" - check_not_match(mv16_1, query16_1, "mv16_1") + check_mv_rewrite_fail(db, mv16_1, query16_1, "mv16_1") order_qt_query16_1_after "${query16_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv16_1""" @@ -631,7 +593,7 @@ suite("aggregate_without_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query17_0_before "${query17_0}" - check_rewrite(mv17_0, query17_0, "mv17_0") + check_mv_rewrite_success(db, mv17_0, query17_0, "mv17_0") order_qt_query17_0_after "${query17_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv17_0""" @@ -690,7 +652,7 @@ suite("aggregate_without_roll_up") { "orders.O_SHIPPRIORITY, " + "orders.O_COMMENT " order_qt_query17_1_before "${query17_1}" - check_rewrite(mv17_1, query17_1, "mv17_1") + check_mv_rewrite_success(db, mv17_1, query17_1, "mv17_1") order_qt_query17_1_after "${query17_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv17_1""" @@ -719,7 +681,7 @@ suite("aggregate_without_roll_up") { "l_shipdate, " + "l_suppkey" order_qt_query18_0_before "${query18_0}" - check_rewrite(mv18_0, query18_0, "mv18_0") + check_mv_rewrite_success(db, mv18_0, query18_0, "mv18_0") order_qt_query18_0_after "${query18_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_0""" @@ -734,7 +696,7 @@ suite("aggregate_without_roll_up") { "where o_custkey = 2 and l_linenumber = 4 " + "group by l_linenumber, o_custkey " order_qt_query18_1_before "${query18_1}" - check_rewrite(mv18_1, query18_1, "mv18_1") + check_mv_rewrite_success(db, mv18_1, query18_1, "mv18_1") order_qt_query18_1_after "${query18_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_1""" @@ -749,7 +711,7 @@ suite("aggregate_without_roll_up") { "where o_custkey = 2 and l_suppkey= 3 " + "group by lineitem.l_linenumber, orders.o_custkey " order_qt_query18_2_before "${query18_2}" - check_not_match(mv18_2, query18_2, "mv18_2") + check_mv_rewrite_fail(db, mv18_2, query18_2, "mv18_2") order_qt_query18_2_after "${query18_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv18_2""" @@ -778,7 +740,7 @@ suite("aggregate_without_roll_up") { "l_partkey, " + "l_suppkey" order_qt_query19_0_before "${query19_0}" - check_rewrite(mv19_0, query19_0, "mv19_0") + check_mv_rewrite_success(db, mv19_0, query19_0, "mv19_0") order_qt_query19_0_after "${query19_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_0""" @@ -792,7 +754,7 @@ suite("aggregate_without_roll_up") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "group by lineitem.L_LINENUMBER, orders.O_CUSTKEY " order_qt_query19_1_before "${query19_1}" - check_rewrite(mv19_1, query19_1, "mv19_1") + check_mv_rewrite_success(db, mv19_1, query19_1, "mv19_1") order_qt_query19_1_after "${query19_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_1""" @@ -838,7 +800,7 @@ suite("aggregate_without_roll_up") { l_suppkey; """ order_qt_query19_2_before "${query19_2}" - check_rewrite(mv19_2, query19_2, "mv19_2") + check_mv_rewrite_success(db, mv19_2, query19_2, "mv19_2") order_qt_query19_2_after "${query19_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_2""" @@ -874,7 +836,7 @@ suite("aggregate_without_roll_up") { l_suppkey; """ order_qt_query19_3_before "${query19_3}" - check_rewrite(mv19_3, query19_3, "mv19_3") + check_mv_rewrite_success(db, mv19_3, query19_3, "mv19_3") order_qt_query19_3_after "${query19_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv19_0""" @@ -923,7 +885,7 @@ suite("aggregate_without_roll_up") { "on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where orders.O_ORDERDATE < '2023-12-30' and orders.O_ORDERDATE > '2023-12-01' " order_qt_query20_0_before "${query20_0}" - check_rewrite(mv20_0, query20_0, "mv20_0") + check_mv_rewrite_success(db, mv20_0, query20_0, "mv20_0") order_qt_query20_0_after "${query20_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_0""" @@ -952,7 +914,7 @@ suite("aggregate_without_roll_up") { on lineitem.L_ORDERKEY = orders.O_ORDERKEY """ order_qt_query20_1_before "${query20_1}" - check_not_match(mv20_1, query20_1, "mv20_1") + check_mv_rewrite_fail(db, mv20_1, query20_1, "mv20_1") order_qt_query20_1_after "${query20_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_1""" @@ -980,7 +942,7 @@ suite("aggregate_without_roll_up") { l_shipinstruct; """ order_qt_query20_2_before "${query20_2}" - check_not_match(mv20_2, query20_2, "mv20_2") + check_mv_rewrite_fail(db, mv20_2, query20_2, "mv20_2") order_qt_query20_2_after "${query20_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv20_2""" @@ -1024,7 +986,7 @@ suite("aggregate_without_roll_up") { group by l_linenumber; """ order_qt_query21_0_before "${query21_0}" - check_rewrite(mv21_0, query21_0, "mv21_0") + check_mv_rewrite_success(db, mv21_0, query21_0, "mv21_0") order_qt_query21_0_after "${query21_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_0""" @@ -1068,7 +1030,7 @@ suite("aggregate_without_roll_up") { group by l_linenumber; """ order_qt_query21_1_before "${query21_1}" - check_not_match(mv21_1, query21_1, "mv21_1") + check_mv_rewrite_fail(db, mv21_1, query21_1, "mv21_1") order_qt_query21_1_after "${query21_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_1""" @@ -1113,7 +1075,7 @@ suite("aggregate_without_roll_up") { group by l_linenumber; """ order_qt_query21_2_before "${query21_2}" - check_not_match(mv21_2, query21_2, "mv21_2") + check_mv_rewrite_fail(db, mv21_2, query21_2, "mv21_2") order_qt_query21_2_after "${query21_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv21_2""" } diff --git a/regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy b/regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy new file mode 100644 index 0000000000..e90a5e8bc7 --- /dev/null +++ b/regression-test/suites/nereids_rules_p0/mv/availability/grace_period.groovy @@ -0,0 +1,489 @@ +// 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("grace_period") { + + // when mv refresh_time is in the grace_period(unit is second), materialized view will be use to + // query rewrite regardless of the base table is update or not + // when mv refresh_time is out of the grace_period(unit is second), will check the base table is update or not + // if update will not be used to query rewrite + String db = context.config.getDbNameByFile(context.file) + sql "use ${db}" + sql "SET enable_nereids_planner=true" + sql "set runtime_filter_mode=OFF" + sql "SET enable_fallback_to_original_planner=false" + sql "SET enable_materialized_view_rewrite=true" + sql "SET enable_nereids_timeout = false" + + sql """ + drop table if exists orders + """ + sql """ + CREATE TABLE IF NOT EXISTS orders_partition ( + o_orderkey integer not null, + o_custkey integer not null, + o_orderstatus char(1) not null, + o_totalprice decimalv3(15,2) not null, + o_orderdate date not null, + o_orderpriority char(15) not null, + o_clerk char(15) not null, + o_shippriority integer not null, + o_comment varchar(79) not null + ) + DUPLICATE KEY(o_orderkey, o_custkey) + PARTITION BY RANGE(o_orderdate)( + FROM ('2023-10-17') TO ('2023-10-20') INTERVAL 1 DAY + ) + DISTRIBUTED BY HASH(o_orderkey) BUCKETS 3 + PROPERTIES ( + "replication_num" = "1" + ); + """ + + sql """ + drop table if exists lineitem + """ + + sql """ + CREATE TABLE IF NOT EXISTS lineitem_partition ( + l_orderkey integer not null, + l_partkey integer not null, + l_suppkey integer not null, + l_linenumber integer not null, + l_quantity decimalv3(15,2) not null, + l_extendedprice decimalv3(15,2) not null, + l_discount decimalv3(15,2) not null, + l_tax decimalv3(15,2) not null, + l_returnflag char(1) not null, + l_linestatus char(1) not null, + l_shipdate date not null, + l_commitdate date not null, + l_receiptdate date not null, + l_shipinstruct char(25) not null, + l_shipmode char(10) not null, + l_comment varchar(44) not null + ) + DUPLICATE KEY(l_orderkey, l_partkey, l_suppkey, l_linenumber) + PARTITION BY RANGE(l_shipdate) + (FROM ('2023-10-17') TO ('2023-10-20') INTERVAL 1 DAY) + DISTRIBUTED BY HASH(l_orderkey) BUCKETS 3 + PROPERTIES ( + "replication_num" = "1" + ); + """ + + sql """ + insert into orders_partition values + (1, 1, 'ok', 99.5, '2023-10-17', 'a', 'b', 1, 'yy'), + (2, 2, 'ok', 109.2, '2023-10-18', 'c','d',2, 'mm'), + (3, 3, 'ok', 99.5, '2023-10-19', 'a', 'b', 1, 'yy'); + """ + + sql """ + insert into lineitem_partition values + (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'), + (2, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-18', '2023-10-18', '2023-10-18', 'a', 'b', 'yyyyyyyyy'), + (3, 2, 3, 6, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-10-19', '2023-10-19', '2023-10-19', 'c', 'd', 'xxxxxxxxx'); + """ + + + def create_partition_mv = { mv_name, mv_sql, grace_period, partition_field -> + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" + sql""" + CREATE MATERIALIZED VIEW ${mv_name} + BUILD IMMEDIATE REFRESH AUTO ON MANUAL + partition by(${partition_field}) + DISTRIBUTED BY RANDOM BUCKETS 2 + PROPERTIES ('replication_num' = '1', 'grace_period'= '${grace_period}') + AS ${mv_sql} + """ + def job_name = getJobName(db, mv_name); + waitingMTMVTaskFinished(job_name) + } + + + def create_un_partition_mv = { mv_name, mv_sql, grace_period -> + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" + sql""" + CREATE MATERIALIZED VIEW ${mv_name} + BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL + DISTRIBUTED BY RANDOM BUCKETS 2 + PROPERTIES ('replication_num' = '1', 'grace_period'= '${grace_period}') + AS ${mv_sql} + """ + def job_name = getJobName(db, mv_name); + waitingMTMVTaskFinished(job_name) + } + + + def mv_partition_consistent_name = "mv_partition_consistent" + create_partition_mv(mv_partition_consistent_name, + """ + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey""", + 0, + "l_shipdate") + + sql """ + insert into lineitem_partition values + (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'); + """ + + // force consistency when partition table, and query use the partition changed, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_partition_consistent_name}(${mv_partition_consistent_name})") + } + // force consistency when partition table, and query doesn't use the partition changed, should success + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + contains("${mv_partition_consistent_name}(${mv_partition_consistent_name})") + } + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_partition_consistent_name}""" + + + + + def mv_un_partition_consistent_name = "mv_un_partition_consistent" + create_un_partition_mv(mv_un_partition_consistent_name, + """ + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey""", + 0) + sql """ + insert into lineitem_partition values + (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'); + """ + // force consistency when un partition table, and query use the partition changed, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_un_partition_consistent_name}(${mv_un_partition_consistent_name})") + } + + // force consistency when un partition table, and query use the partition changed, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_un_partition_consistent_name}(${mv_un_partition_consistent_name})") + } + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_un_partition_consistent_name}""" + + + + + def mv_partition_allow_staleness_name = "mv_partition_allow_staleness" + create_partition_mv(mv_partition_allow_staleness_name, + """ + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey""", + 15, + "l_shipdate") + + sql """ + insert into lineitem_partition values + (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'); + """ + + // allow 10s staleness when partition table, and query use the partition changed, should success + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + contains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})") + } + // allow 10s staleness when partition table, and query doesn't use the partition changed, should success + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + contains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})") + } + sql "SET enable_materialized_view_rewrite=false" + // allow 10s staleness when partition table, and query use the partition changed, should success, + // but disable materialized view rewrite, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})") + } + // allow 10s staleness when partition table, and query doesn't use the partition changed, + // but disable materialized view rewrite, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})") + } + sql "SET enable_materialized_view_rewrite=true" + Thread.sleep(15000); + // after 10s when partition table, and query use the partition changed, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})") + } + // after 10s when partition table, and query doesn't use the partition changed, should success + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + contains("${mv_partition_allow_staleness_name}(${mv_partition_allow_staleness_name})") + } + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_partition_allow_staleness_name}""" + + + + + def mv_un_partition_allow_staleness_name = "mv_un_partition_allow_staleness" + create_un_partition_mv(mv_un_partition_allow_staleness_name, + """ + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey""", + 15) + + sql """ + insert into lineitem_partition values + (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy'); + """ + // allow 10s staleness when un partition table should success + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + contains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})") + } + // allow 10s staleness when un partition table, should success + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + contains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})") + } + sql "SET enable_materialized_view_rewrite=false" + // allow 10s staleness when un partition table, but disable materialized view rewrite, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})") + } + // allow 10s staleness when un partition table, but disable materialized view rewrite, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})") + } + sql "SET enable_materialized_view_rewrite=true" + Thread.sleep(15000); + // after 10s when un partition table, and query use the partition changed, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-17' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})") + } + // after 10s when un partition table, and query doesn't use the partition changed, should fail + explain { + sql(""" + select l_shipdate, o_orderdate, l_partkey, + l_suppkey, sum(o_totalprice) as sum_total + from lineitem_partition + left join orders_partition on l_orderkey = o_orderkey and l_shipdate = o_orderdate + where l_shipdate = '2023-10-18' + group by + l_shipdate, + o_orderdate, + l_partkey, + l_suppkey; + """) + notContains("${mv_un_partition_allow_staleness_name}(${mv_un_partition_allow_staleness_name})") + } + sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_un_partition_allow_staleness_name}""" +} diff --git a/regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.groovy b/regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.groovy new file mode 100644 index 0000000000..29bd112e76 --- /dev/null +++ b/regression-test/suites/nereids_rules_p0/mv/availability/materialized_view_switch.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("materialized_view_switch") { + + String db = context.config.getDbNameByFile(context.file) + sql "use ${db}" + sql "SET enable_nereids_planner=true" + sql "set runtime_filter_mode=OFF"; + sql "SET ignore_shape_nodes='PhysicalDistribute,PhysicalProject'" + sql "SET enable_fallback_to_original_planner=false" + sql "SET enable_materialized_view_rewrite=true" + + sql """ + drop table if exists orders + """ + + sql """ + CREATE TABLE IF NOT EXISTS orders ( + o_orderkey INTEGER NOT NULL, + o_custkey INTEGER NOT NULL, + o_orderstatus CHAR(1) NOT NULL, + o_totalprice DECIMALV3(15,2) NOT NULL, + o_orderdate DATE NOT NULL, + o_orderpriority CHAR(15) NOT NULL, + o_clerk CHAR(15) NOT NULL, + o_shippriority INTEGER NOT NULL, + O_COMMENT VARCHAR(79) NOT NULL + ) + DUPLICATE KEY(o_orderkey, o_custkey) + PARTITION BY RANGE(o_orderdate) ( + PARTITION `day_2` VALUES LESS THAN ('2023-12-9'), + PARTITION `day_3` VALUES LESS THAN ("2023-12-11"), + PARTITION `day_4` VALUES LESS THAN ("2023-12-30") + ) + DISTRIBUTED BY HASH(o_orderkey) BUCKETS 3 + PROPERTIES ( + "replication_num" = "1" + ); + """ + + sql """ + drop table if exists lineitem + """ + + sql""" + CREATE TABLE IF NOT EXISTS lineitem ( + l_orderkey INTEGER NOT NULL, + l_partkey INTEGER NOT NULL, + l_suppkey INTEGER NOT NULL, + l_linenumber INTEGER NOT NULL, + l_quantity DECIMALV3(15,2) NOT NULL, + l_extendedprice DECIMALV3(15,2) NOT NULL, + l_discount DECIMALV3(15,2) NOT NULL, + l_tax DECIMALV3(15,2) NOT NULL, + l_returnflag CHAR(1) NOT NULL, + l_linestatus CHAR(1) NOT NULL, + l_shipdate DATE NOT NULL, + l_commitdate DATE NOT NULL, + l_receiptdate DATE NOT NULL, + l_shipinstruct CHAR(25) NOT NULL, + l_shipmode CHAR(10) NOT NULL, + l_comment VARCHAR(44) NOT NULL + ) + DUPLICATE KEY(l_orderkey, l_partkey, l_suppkey, l_linenumber) + PARTITION BY RANGE(l_shipdate) ( + PARTITION `day_1` VALUES LESS THAN ('2023-12-9'), + PARTITION `day_2` VALUES LESS THAN ("2023-12-11"), + PARTITION `day_3` VALUES LESS THAN ("2023-12-30")) + DISTRIBUTED BY HASH(l_orderkey) BUCKETS 3 + PROPERTIES ( + "replication_num" = "1" + ) + """ + + sql """ + drop table if exists partsupp + """ + + sql """ + CREATE TABLE IF NOT EXISTS partsupp ( + ps_partkey INTEGER NOT NULL, + ps_suppkey INTEGER NOT NULL, + ps_availqty INTEGER NOT NULL, + ps_supplycost DECIMALV3(15,2) NOT NULL, + ps_comment VARCHAR(199) NOT NULL + ) + DUPLICATE KEY(ps_partkey, ps_suppkey) + DISTRIBUTED BY HASH(ps_partkey) BUCKETS 3 + PROPERTIES ( + "replication_num" = "1" + ) + """ + + sql """ insert into lineitem values + (1, 2, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-08', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'), + (2, 4, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-09', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'), + (3, 2, 4, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-10', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'), + (4, 3, 3, 4, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-12-11', '2023-12-09', '2023-12-10', 'a', 'b', 'yyyyyyyyy'), + (5, 2, 3, 6, 7.5, 8.5, 9.5, 10.5, 'k', 'o', '2023-12-12', '2023-12-12', '2023-12-13', 'c', 'd', 'xxxxxxxxx'); + """ + + sql """ + insert into orders values + (1, 1, 'o', 9.5, '2023-12-08', 'a', 'b', 1, 'yy'), + (1, 1, 'o', 10.5, '2023-12-08', 'a', 'b', 1, 'yy'), + (2, 1, 'o', 11.5, '2023-12-09', 'a', 'b', 1, 'yy'), + (3, 1, 'o', 12.5, '2023-12-10', 'a', 'b', 1, 'yy'), + (3, 1, 'o', 33.5, '2023-12-10', 'a', 'b', 1, 'yy'), + (4, 2, 'o', 43.2, '2023-12-11', 'c','d',2, 'mm'), + (5, 2, 'o', 56.2, '2023-12-12', 'c','d',2, 'mi'), + (5, 2, 'o', 1.2, '2023-12-12', 'c','d',2, 'mi'); + """ + + sql """ + insert into partsupp values + (2, 3, 9, 10.01, 'supply1'), + (2, 3, 10, 11.01, 'supply2'); + """ + + def mv_name = """ + select l_shipdate, o_orderdate, l_partkey, l_suppkey, o_orderkey + from lineitem + left join (select * from orders where o_orderdate = '2023-12-10' ) t2 + on lineitem.l_orderkey = t2.o_orderkey; + """ + def query = """ + select l_shipdate, o_orderdate, l_partkey, l_suppkey, o_orderkey + from lineitem + left join orders + on lineitem.l_orderkey = orders.o_orderkey + where o_orderdate = '2023-12-10' order by 1, 2, 3, 4, 5; + """ + + check_mv_rewrite_success(db, mv_name, query, "mv_name") + sql "SET enable_materialized_view_rewrite=false" + check_mv_rewrite_fail(db, mv_name, query, "mv_name") + sql "SET enable_materialized_view_rewrite=true" + check_mv_rewrite_success(db, mv_name, query, "mv_name") + sql """ DROP MATERIALIZED VIEW IF EXISTS mv_name""" +} \ No newline at end of file diff --git a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy index 5fd8db4bcd..95e5dbed7a 100644 --- a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_inner/inner_join_dphyp.groovy @@ -125,44 +125,6 @@ suite("inner_join_dphyp") { (2, 3, 10, 11.01, 'supply2'); """ - def check_rewrite = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - contains("${mv_name}(${mv_name})") - } - } - - def check_not_match = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - notContains("${mv_name}(${mv_name})") - } - } - // without filter def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " + "from lineitem " + @@ -171,7 +133,7 @@ suite("inner_join_dphyp") { "from lineitem " + "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_0_before "${query1_0}" - check_rewrite(mv1_0, query1_0, "mv1_0") + check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0") order_qt_query1_0_after "${query1_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0""" @@ -187,7 +149,7 @@ suite("inner_join_dphyp") { "inner join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " + "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY" order_qt_query1_1_before "${query1_1}" - check_rewrite(mv1_1, query1_1, "mv1_1") + check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1") order_qt_query1_1_after "${query1_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1""" @@ -199,7 +161,7 @@ suite("inner_join_dphyp") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_2_before "${query1_2}" // join direction is not same, should not match - check_rewrite(mv1_2, query1_2, "mv1_2") + check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2") order_qt_query1_2_after "${query1_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2""" @@ -212,7 +174,7 @@ suite("inner_join_dphyp") { "from orders " + "inner join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY" order_qt_query1_3_before "${query1_3}" - check_rewrite(mv1_3, query1_3, "mv1_3") + check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3") order_qt_query1_3_after "${query1_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3""" @@ -231,7 +193,7 @@ suite("inner_join_dphyp") { and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY; """ order_qt_query1_4_before "${query1_4}" - check_rewrite(mv1_4, query1_4, "mv1_4") + check_mv_rewrite_success(db, mv1_4, query1_4, "mv1_4") order_qt_query1_4_after "${query1_4}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_4""" @@ -247,7 +209,7 @@ suite("inner_join_dphyp") { and o_shippriority = l_partkey; """ order_qt_query1_5_before "${query1_5}" - check_rewrite(mv1_5, query1_5, "mv1_5") + check_mv_rewrite_success(db, mv1_5, query1_5, "mv1_5") order_qt_query1_5_after "${query1_5}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_5""" @@ -260,7 +222,7 @@ suite("inner_join_dphyp") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 0" order_qt_query2_0_before "${query2_0}" - check_rewrite(mv2_0, query2_0, "mv2_0") + check_mv_rewrite_success(db, mv2_0, query2_0, "mv2_0") order_qt_query2_0_after "${query2_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0""" @@ -273,7 +235,7 @@ suite("inner_join_dphyp") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 1" order_qt_query2_1_before "${query2_1}" - check_rewrite(mv2_1, query2_1, "mv2_1") + check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1") order_qt_query2_1_after "${query2_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1""" @@ -286,7 +248,7 @@ suite("inner_join_dphyp") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 1 and l_suppkey = 3" order_qt_query2_2_before "${query2_2}" - check_rewrite(mv2_2, query2_2, "mv2_2") + check_mv_rewrite_success(db, mv2_2, query2_2, "mv2_2") order_qt_query2_2_after "${query2_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2""" @@ -303,7 +265,7 @@ suite("inner_join_dphyp") { "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " + "where lineitem.L_LINENUMBER > 1 and l_suppkey = 3 " order_qt_query2_3_before "${query2_3}" - check_rewrite(mv2_3, query2_3, "mv2_3") + check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3") order_qt_query2_3_after "${query2_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3""" @@ -318,7 +280,7 @@ suite("inner_join_dphyp") { "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_0_before "${query3_0}" // use a filed not from mv, should not success - check_not_match(mv3_0, query3_0, "mv3_0") + check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0") order_qt_query3_0_after "${query3_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0""" @@ -331,7 +293,7 @@ suite("inner_join_dphyp") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_1_before "${query3_1}" - check_rewrite(mv3_1, query3_1, "mv3_1") + check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1") order_qt_query3_1_after "${query3_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1""" @@ -346,7 +308,7 @@ suite("inner_join_dphyp") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_2_before "${query3_2}" - check_rewrite(mv3_2, query3_2, "mv3_2") + check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2") order_qt_query3_2_after "${query3_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2""" @@ -363,7 +325,7 @@ suite("inner_join_dphyp") { "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " + "where o_custkey in (1, 2, 3, 4) " order_qt_query3_3_before "${query3_3}" - check_rewrite(mv3_3, query3_3, "mv3_3") + check_mv_rewrite_success(db, mv3_3, query3_3, "mv3_3") order_qt_query3_3_after "${query3_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_3""" @@ -383,7 +345,7 @@ suite("inner_join_dphyp") { where o_custkey = 1 and l_linenumber > 0; """ order_qt_query3_4_before "${query3_4}" - check_rewrite(mv3_4, query3_4, "mv3_4") + check_mv_rewrite_success(db, mv3_4, query3_4, "mv3_4") order_qt_query3_4_after "${query3_4}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_4""" @@ -397,7 +359,7 @@ suite("inner_join_dphyp") { "inner join orders on lineitem.l_orderkey = orders.o_orderkey " + "where o_orderstatus = 'o' AND l_linenumber in (1, 2, 3, 4, 5) " order_qt_query4_0_before "${query4_0}" - check_rewrite(mv4_0, query4_0, "mv4_0") + check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0") order_qt_query4_0_after "${query4_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0""" @@ -411,7 +373,7 @@ suite("inner_join_dphyp") { "from (select * from lineitem where l_linenumber > 1) t1 " + "inner join orders on t1.l_orderkey = orders.O_ORDERKEY " order_qt_query5_0_before "${query5_0}" - check_rewrite(mv5_0, query5_0, "mv5_0") + check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0") order_qt_query5_0_after "${query5_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0""" @@ -426,7 +388,7 @@ suite("inner_join_dphyp") { "inner join (select * from orders where o_orderdate = '2023-12-08') t2 " + "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " order_qt_query6_0_before "${query6_0}" - check_rewrite(mv6_0, query6_0, "mv6_0") + check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0") order_qt_query6_0_after "${query6_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0""" @@ -443,7 +405,7 @@ suite("inner_join_dphyp") { "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " + "where l_partkey = 2" order_qt_query7_0_before "${query7_0}" - check_rewrite(mv7_0, query7_0, "mv7_0") + check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0") order_qt_query7_0_after "${query7_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0""" @@ -458,7 +420,7 @@ suite("inner_join_dphyp") { "WHERE lineitem.L_LINENUMBER > 0 AND orders.O_CUSTKEY = 1 AND " + "orders.O_SHIPPRIORITY = 2" order_qt_query10_0_before "${query10_0}" - check_not_match(mv10_0, query10_0, "mv10_0") + check_mv_rewrite_fail(db, mv10_0, query10_0, "mv10_0") order_qt_query10_0_after "${query10_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv10_0""" } diff --git a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy index dc9e78e00c..69ffd60485 100644 --- a/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/join/dphyp_outer/outer_join_dphyp.groovy @@ -125,44 +125,6 @@ suite("outer_join_dphyp") { (2, 3, 10, 11.01, 'supply2'); """ - def check_rewrite = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - contains("${mv_name}(${mv_name})") - } - } - - def check_not_match = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - notContains("${mv_name}(${mv_name})") - } - } - // without filter def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " + "from lineitem " + @@ -171,7 +133,7 @@ suite("outer_join_dphyp") { "from lineitem " + "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_0_before "${query1_0}" - check_rewrite(mv1_0, query1_0, "mv1_0") + check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0") order_qt_query1_0_after "${query1_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0""" @@ -187,7 +149,7 @@ suite("outer_join_dphyp") { "left join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " + "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY" order_qt_query1_1_before "${query1_1}" - check_rewrite(mv1_1, query1_1, "mv1_1") + check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1") order_qt_query1_1_after "${query1_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1""" @@ -199,7 +161,7 @@ suite("outer_join_dphyp") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_2_before "${query1_2}" // join direction is not same, should not match - check_not_match(mv1_2, query1_2, "mv1_2") + check_mv_rewrite_fail(db, mv1_2, query1_2, "mv1_2") order_qt_query1_2_after "${query1_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2""" @@ -212,7 +174,7 @@ suite("outer_join_dphyp") { "from orders " + "left join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY" order_qt_query1_3_before "${query1_3}" - check_rewrite(mv1_3, query1_3, "mv1_3") + check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3") order_qt_query1_3_after "${query1_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3""" @@ -226,7 +188,7 @@ suite("outer_join_dphyp") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 0" order_qt_query2_0_before "${query2_0}" - check_not_match(mv2_0, query2_0, "mv2_0") + check_mv_rewrite_fail(db, mv2_0, query2_0, "mv2_0") order_qt_query2_0_after "${query2_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0""" @@ -239,7 +201,7 @@ suite("outer_join_dphyp") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 1" order_qt_query2_1_before "${query2_1}" - check_rewrite(mv2_1, query2_1, "mv2_1") + check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1") order_qt_query2_1_after "${query2_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1""" @@ -256,7 +218,7 @@ suite("outer_join_dphyp") { where lineitem.L_LINENUMBER > 1 and l_suppkey = 3; """ order_qt_query2_2_before "${query2_2}" - check_not_match(mv2_2, query2_2, "mv2_2") + check_mv_rewrite_fail(db, mv2_2, query2_2, "mv2_2") order_qt_query2_2_after "${query2_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2""" @@ -273,7 +235,7 @@ suite("outer_join_dphyp") { where lineitem.L_LINENUMBER > 1 and l_suppkey = 3; """ order_qt_query2_3_before "${query2_3}" - check_rewrite(mv2_3, query2_3, "mv2_3") + check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3") order_qt_query2_3_after "${query2_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3""" @@ -292,7 +254,7 @@ suite("outer_join_dphyp") { """ order_qt_query3_0_before "${query3_0}" // use a filed not from mv, should not success - check_not_match(mv3_0, query3_0, "mv3_0") + check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0") order_qt_query3_0_after "${query3_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0""" @@ -305,7 +267,7 @@ suite("outer_join_dphyp") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_1_before "${query3_1}" - check_rewrite(mv3_1, query3_1, "mv3_1") + check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1") order_qt_query3_1_after "${query3_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1""" @@ -321,7 +283,7 @@ suite("outer_join_dphyp") { "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_2_before "${query3_2}" // should not success, as mv filter is under left outer input - check_rewrite(mv3_2, query3_2, "mv3_2") + check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2") order_qt_query3_2_after "${query3_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2""" @@ -339,7 +301,7 @@ suite("outer_join_dphyp") { where o_orderstatus = 'o' AND o_orderkey = 1; """ order_qt_query4_0_before "${query4_0}" - check_rewrite(mv4_0, query4_0, "mv4_0") + check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0") order_qt_query4_0_after "${query4_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0""" @@ -353,7 +315,7 @@ suite("outer_join_dphyp") { "from (select * from lineitem where l_linenumber > 1) t1 " + "left join orders on t1.l_orderkey = orders.O_ORDERKEY " order_qt_query5_0_before "${query5_0}" - check_rewrite(mv5_0, query5_0, "mv5_0") + check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0") order_qt_query5_0_after "${query5_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0""" @@ -372,7 +334,7 @@ suite("outer_join_dphyp") { where o_orderdate = '2023-12-08' """ order_qt_query5_1_before "${query5_1}" - check_not_match(mv5_1, query5_1, "mv5_1") + check_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1") order_qt_query5_1_after "${query5_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1""" @@ -387,7 +349,7 @@ suite("outer_join_dphyp") { "left join (select * from orders where o_orderdate = '2023-12-08') t2 " + "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " order_qt_query6_0_before "${query6_0}" - check_rewrite(mv6_0, query6_0, "mv6_0") + check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0") order_qt_query6_0_after "${query6_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0""" @@ -404,7 +366,7 @@ suite("outer_join_dphyp") { "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " + "where l_partkey = 3" order_qt_query7_0_before "${query7_0}" - check_rewrite(mv7_0, query7_0, "mv7_0") + check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0") order_qt_query7_0_after "${query7_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0""" @@ -423,7 +385,7 @@ suite("outer_join_dphyp") { on t1.l_orderkey = orders.o_orderkey; """ order_qt_query7_1_before "${query7_1}" - check_not_match(mv7_1, query7_1, "mv7_1") + check_mv_rewrite_fail(db, mv7_1, query7_1, "mv7_1") order_qt_query7_1_after "${query7_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_1""" @@ -463,7 +425,7 @@ suite("outer_join_dphyp") { group by a.o_orderkey; """ order_qt_query8_0_before "${query8_0}" - check_rewrite(mv8_0, query8_0, "mv8_0") + check_mv_rewrite_success(db, mv8_0, query8_0, "mv8_0") order_qt_query8_0_after "${query8_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv8_0""" @@ -523,7 +485,7 @@ suite("outer_join_dphyp") { t1.col1 """ order_qt_query9_0_before "${query9_0}" - check_rewrite(mv9_0, query9_0, "mv9_0") + check_mv_rewrite_success(db, mv9_0, query9_0, "mv9_0") order_qt_query9_0_after "${query9_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv9_0""" } diff --git a/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy b/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy index ed50e19c60..e34c338a7f 100644 --- a/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/join/inner/inner_join.groovy @@ -124,44 +124,6 @@ suite("inner_join") { (2, 3, 10, 11.01, 'supply2'); """ - def check_rewrite = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - contains("${mv_name}(${mv_name})") - } - } - - def check_not_match = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - notContains("${mv_name}(${mv_name})") - } - } - // without filter def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " + "from lineitem " + @@ -170,7 +132,7 @@ suite("inner_join") { "from lineitem " + "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_0_before "${query1_0}" - check_rewrite(mv1_0, query1_0, "mv1_0") + check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0") order_qt_query1_0_after "${query1_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0""" @@ -186,7 +148,7 @@ suite("inner_join") { "inner join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " + "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY" order_qt_query1_1_before "${query1_1}" - check_rewrite(mv1_1, query1_1, "mv1_1") + check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1") order_qt_query1_1_after "${query1_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1""" @@ -198,7 +160,7 @@ suite("inner_join") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_2_before "${query1_2}" // join direction is not same, should not match - check_rewrite(mv1_2, query1_2, "mv1_2") + check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2") order_qt_query1_2_after "${query1_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2""" @@ -211,7 +173,7 @@ suite("inner_join") { "from orders " + "inner join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY" order_qt_query1_3_before "${query1_3}" - check_rewrite(mv1_3, query1_3, "mv1_3") + check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3") order_qt_query1_3_after "${query1_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3""" @@ -230,7 +192,7 @@ suite("inner_join") { and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY; """ order_qt_query1_4_before "${query1_4}" - check_rewrite(mv1_4, query1_4, "mv1_4") + check_mv_rewrite_success(db, mv1_4, query1_4, "mv1_4") order_qt_query1_4_after "${query1_4}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_4""" @@ -246,7 +208,7 @@ suite("inner_join") { and o_shippriority = l_partkey; """ order_qt_query1_5_before "${query1_5}" - check_rewrite(mv1_5, query1_5, "mv1_5") + check_mv_rewrite_success(db, mv1_5, query1_5, "mv1_5") order_qt_query1_5_after "${query1_5}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_5""" @@ -259,7 +221,7 @@ suite("inner_join") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 0" order_qt_query2_0_before "${query2_0}" - check_rewrite(mv2_0, query2_0, "mv2_0") + check_mv_rewrite_success(db, mv2_0, query2_0, "mv2_0") order_qt_query2_0_after "${query2_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0""" @@ -272,7 +234,7 @@ suite("inner_join") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 1" order_qt_query2_1_before "${query2_1}" - check_rewrite(mv2_1, query2_1, "mv2_1") + check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1") order_qt_query2_1_after "${query2_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1""" @@ -285,7 +247,7 @@ suite("inner_join") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 1 and l_suppkey = 3" order_qt_query2_2_before "${query2_2}" - check_rewrite(mv2_2, query2_2, "mv2_2") + check_mv_rewrite_success(db, mv2_2, query2_2, "mv2_2") order_qt_query2_2_after "${query2_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2""" @@ -302,7 +264,7 @@ suite("inner_join") { "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " + "where lineitem.L_LINENUMBER > 1 and l_suppkey = 3 " order_qt_query2_3_before "${query2_3}" - check_rewrite(mv2_3, query2_3, "mv2_3") + check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3") order_qt_query2_3_after "${query2_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3""" @@ -317,7 +279,7 @@ suite("inner_join") { "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_0_before "${query3_0}" // use a filed not from mv, should not success - check_not_match(mv3_0, query3_0, "mv3_0") + check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0") order_qt_query3_0_after "${query3_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0""" @@ -330,7 +292,7 @@ suite("inner_join") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_1_before "${query3_1}" - check_rewrite(mv3_1, query3_1, "mv3_1") + check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1") order_qt_query3_1_after "${query3_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1""" @@ -345,7 +307,7 @@ suite("inner_join") { "inner join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_2_before "${query3_2}" - check_rewrite(mv3_2, query3_2, "mv3_2") + check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2") order_qt_query3_2_after "${query3_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2""" @@ -362,7 +324,7 @@ suite("inner_join") { "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY " + "where o_custkey in (1, 2, 3, 4) " order_qt_query3_3_before "${query3_3}" - check_rewrite(mv3_3, query3_3, "mv3_3") + check_mv_rewrite_success(db, mv3_3, query3_3, "mv3_3") order_qt_query3_3_after "${query3_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_3""" @@ -382,7 +344,7 @@ suite("inner_join") { where o_custkey = 1 and l_linenumber > 0; """ order_qt_query3_4_before "${query3_4}" - check_rewrite(mv3_4, query3_4, "mv3_4") + check_mv_rewrite_success(db, mv3_4, query3_4, "mv3_4") order_qt_query3_4_after "${query3_4}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_4""" @@ -396,7 +358,7 @@ suite("inner_join") { "inner join orders on lineitem.l_orderkey = orders.o_orderkey " + "where o_orderstatus = 'o' AND l_linenumber in (1, 2, 3, 4, 5) " order_qt_query4_0_before "${query4_0}" - check_rewrite(mv4_0, query4_0, "mv4_0") + check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0") order_qt_query4_0_after "${query4_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0""" @@ -410,7 +372,7 @@ suite("inner_join") { "from (select * from lineitem where l_linenumber > 1) t1 " + "inner join orders on t1.l_orderkey = orders.O_ORDERKEY " order_qt_query5_0_before "${query5_0}" - check_rewrite(mv5_0, query5_0, "mv5_0") + check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0") order_qt_query5_0_after "${query5_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0""" @@ -425,7 +387,7 @@ suite("inner_join") { "inner join (select * from orders where o_orderdate = '2023-12-08') t2 " + "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " order_qt_query6_0_before "${query6_0}" - check_rewrite(mv6_0, query6_0, "mv6_0") + check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0") order_qt_query6_0_after "${query6_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0""" @@ -442,7 +404,7 @@ suite("inner_join") { "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " + "where l_partkey = 2" order_qt_query7_0_before "${query7_0}" - check_rewrite(mv7_0, query7_0, "mv7_0") + check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0") order_qt_query7_0_after "${query7_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0""" @@ -457,7 +419,7 @@ suite("inner_join") { "WHERE lineitem.L_LINENUMBER > 0 AND orders.O_CUSTKEY = 1 AND " + "orders.O_SHIPPRIORITY = 2" order_qt_query10_0_before "${query10_0}" - check_not_match(mv10_0, query10_0, "mv10_0") + check_mv_rewrite_fail(db, mv10_0, query10_0, "mv10_0") order_qt_query10_0_after "${query10_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv10_0""" } diff --git a/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy b/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy index 6a5bda9d22..e2b9a8297e 100644 --- a/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/join/left_outer/outer_join.groovy @@ -202,44 +202,6 @@ suite("outer_join") { (2, 3, 10, 11.01, 'supply2'); """ - def check_rewrite = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - contains("${mv_name}(${mv_name})") - } - } - - def check_not_match = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - notContains("${mv_name}(${mv_name})") - } - } - // without filter def mv1_0 = "select lineitem.L_LINENUMBER, orders.O_CUSTKEY " + "from lineitem " + @@ -248,7 +210,7 @@ suite("outer_join") { "from lineitem " + "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_0_before "${query1_0}" - check_rewrite(mv1_0, query1_0, "mv1_0") + check_mv_rewrite_success(db, mv1_0, query1_0, "mv1_0") order_qt_query1_0_after "${query1_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_0""" @@ -264,7 +226,7 @@ suite("outer_join") { "left join partsupp on lineitem.L_PARTKEY = partsupp.PS_PARTKEY " + "and lineitem.L_SUPPKEY = partsupp.PS_SUPPKEY" order_qt_query1_1_before "${query1_1}" - check_rewrite(mv1_1, query1_1, "mv1_1") + check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1") order_qt_query1_1_after "${query1_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1""" @@ -276,7 +238,7 @@ suite("outer_join") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " order_qt_query1_2_before "${query1_2}" // join direction is not same, should not match - check_not_match(mv1_2, query1_2, "mv1_2") + check_mv_rewrite_fail(db, mv1_2, query1_2, "mv1_2") order_qt_query1_2_after "${query1_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2""" @@ -289,7 +251,7 @@ suite("outer_join") { "from orders " + "left join lineitem on orders.O_ORDERKEY = lineitem.L_ORDERKEY" order_qt_query1_3_before "${query1_3}" - check_rewrite(mv1_3, query1_3, "mv1_3") + check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3") order_qt_query1_3_after "${query1_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3""" @@ -303,7 +265,7 @@ suite("outer_join") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 0" order_qt_query2_0_before "${query2_0}" - check_not_match(mv2_0, query2_0, "mv2_0") + check_mv_rewrite_fail(db, mv2_0, query2_0, "mv2_0") order_qt_query2_0_after "${query2_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_0""" @@ -316,7 +278,7 @@ suite("outer_join") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where lineitem.L_LINENUMBER > 1" order_qt_query2_1_before "${query2_1}" - check_rewrite(mv2_1, query2_1, "mv2_1") + check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1") order_qt_query2_1_after "${query2_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1""" @@ -333,7 +295,7 @@ suite("outer_join") { where lineitem.L_LINENUMBER > 1 and l_suppkey = 3; """ order_qt_query2_2_before "${query2_2}" - check_not_match(mv2_2, query2_2, "mv2_2") + check_mv_rewrite_fail(db, mv2_2, query2_2, "mv2_2") order_qt_query2_2_after "${query2_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2""" @@ -350,7 +312,7 @@ suite("outer_join") { where lineitem.L_LINENUMBER > 1 and l_suppkey = 3; """ order_qt_query2_3_before "${query2_3}" - check_rewrite(mv2_3, query2_3, "mv2_3") + check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3") order_qt_query2_3_after "${query2_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3""" @@ -369,7 +331,7 @@ suite("outer_join") { """ order_qt_query3_0_before "${query3_0}" // use a filed not from mv, should not success - check_not_match(mv3_0, query3_0, "mv3_0") + check_mv_rewrite_fail(db, mv3_0, query3_0, "mv3_0") order_qt_query3_0_after "${query3_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_0""" @@ -382,7 +344,7 @@ suite("outer_join") { "left join orders on lineitem.L_ORDERKEY = orders.O_ORDERKEY " + "where orders.O_ORDERSTATUS = 'o'" order_qt_query3_1_before "${query3_1}" - check_rewrite(mv3_1, query3_1, "mv3_1") + check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1") order_qt_query3_1_after "${query3_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1""" @@ -402,7 +364,7 @@ suite("outer_join") { """ order_qt_query3_2_before "${query3_2}" // should not success, as mv filter is under left outer input - check_rewrite(mv3_2, query3_2, "mv3_2") + check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2") order_qt_query3_2_after "${query3_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2""" @@ -420,7 +382,7 @@ suite("outer_join") { where o_orderstatus = 'o' AND o_orderkey = 1; """ order_qt_query4_0_before "${query4_0}" - check_rewrite(mv4_0, query4_0, "mv4_0") + check_mv_rewrite_success(db, mv4_0, query4_0, "mv4_0") order_qt_query4_0_after "${query4_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_0""" @@ -434,7 +396,7 @@ suite("outer_join") { "from (select * from lineitem where l_linenumber > 1) t1 " + "left join orders on t1.l_orderkey = orders.O_ORDERKEY " order_qt_query5_0_before "${query5_0}" - check_rewrite(mv5_0, query5_0, "mv5_0") + check_mv_rewrite_success(db, mv5_0, query5_0, "mv5_0") order_qt_query5_0_after "${query5_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_0""" @@ -453,7 +415,7 @@ suite("outer_join") { where o_orderdate = '2023-12-08' """ order_qt_query5_1_before "${query5_1}" - check_not_match(mv5_1, query5_1, "mv5_1") + check_mv_rewrite_fail(db, mv5_1, query5_1, "mv5_1") order_qt_query5_1_after "${query5_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv5_1""" @@ -468,7 +430,7 @@ suite("outer_join") { "left join (select * from orders where o_orderdate = '2023-12-08') t2 " + "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " order_qt_query6_0_before "${query6_0}" - check_rewrite(mv6_0, query6_0, "mv6_0") + check_mv_rewrite_success(db, mv6_0, query6_0, "mv6_0") order_qt_query6_0_after "${query6_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_0""" @@ -487,7 +449,7 @@ suite("outer_join") { where l_shipdate = '2023-12-10' and o_orderdate = '2023-12-10'; """ order_qt_query6_1_before "${query6_1}" - check_rewrite(mv6_1, query6_1, "mv6_1") + check_mv_rewrite_success(db, mv6_1, query6_1, "mv6_1") order_qt_query6_1_after "${query6_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_1""" @@ -507,7 +469,7 @@ suite("outer_join") { where o_orderdate = '2023-12-10' order by 1, 2, 3, 4, 5; """ order_qt_query6_2_before "${query6_2}" - check_rewrite(mv6_2, query6_2, "mv6_2") + check_mv_rewrite_success(db, mv6_2, query6_2, "mv6_2") order_qt_query6_2_after "${query6_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv6_2""" @@ -524,7 +486,7 @@ suite("outer_join") { "on t1.l_orderkey = o_orderkey and t1.l_shipdate = o_orderdate " + "where l_partkey = 3" order_qt_query7_0_before "${query7_0}" - check_rewrite(mv7_0, query7_0, "mv7_0") + check_mv_rewrite_success(db, mv7_0, query7_0, "mv7_0") order_qt_query7_0_after "${query7_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_0""" @@ -543,7 +505,7 @@ suite("outer_join") { on t1.l_orderkey = orders.o_orderkey; """ order_qt_query7_1_before "${query7_1}" - check_not_match(mv7_1, query7_1, "mv7_1") + check_mv_rewrite_fail(db, mv7_1, query7_1, "mv7_1") order_qt_query7_1_after "${query7_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv7_1""" @@ -583,7 +545,7 @@ suite("outer_join") { group by a.o_orderkey; """ order_qt_query8_0_before "${query8_0}" - check_rewrite(mv8_0, query8_0, "mv8_0") + check_mv_rewrite_success(db, mv8_0, query8_0, "mv8_0") order_qt_query8_0_after "${query8_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv8_0""" @@ -644,7 +606,7 @@ suite("outer_join") { t1.col1 """ order_qt_query9_0_before "${query9_0}" - check_rewrite(mv9_0, query9_0, "mv9_0") + check_mv_rewrite_success(db, mv9_0, query9_0, "mv9_0") order_qt_query9_0_after "${query9_0}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv9_0""" } diff --git a/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy b/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy index 887907c651..7bbb8f19da 100644 --- a/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy +++ b/regression-test/suites/nereids_rules_p0/mv/ssb/mv_ssb_test.groovy @@ -92,45 +92,6 @@ suite("mv_ssb_test") { sql "SET enable_materialized_view_rewrite=true" sql "SET enable_nereids_timeout = false" - def check_rewrite = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - contains("${mv_name}(${mv_name})") - } - } - - def check_not_match = { mv_sql, query_sql, mv_name -> - - sql """DROP MATERIALIZED VIEW IF EXISTS ${mv_name}""" - sql""" - CREATE MATERIALIZED VIEW ${mv_name} - BUILD IMMEDIATE REFRESH COMPLETE ON MANUAL - DISTRIBUTED BY RANDOM BUCKETS 2 - PROPERTIES ('replication_num' = '1') - AS ${mv_sql} - """ - - def job_name = getJobName(db, mv_name); - waitingMTMVTaskFinished(job_name) - explain { - sql("${query_sql}") - notContains("${mv_name}(${mv_name})") - } - } - - def mv1_1 = """ SELECT SUM(lo_extendedprice*lo_discount) AS REVENUE @@ -150,7 +111,7 @@ suite("mv_ssb_test") { AND lo_quantity < 25; """ order_qt_query1_1_before "${query1_1}" - check_rewrite(mv1_1, query1_1, "mv1_1") + check_mv_rewrite_success(db, mv1_1, query1_1, "mv1_1") order_qt_query1_1_after "${query1_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_1""" @@ -174,7 +135,7 @@ suite("mv_ssb_test") { AND lo_quantity BETWEEN 26 AND 35; """ order_qt_query1_2_before "${query1_2}" - check_rewrite(mv1_2, query1_2, "mv1_2") + check_mv_rewrite_success(db, mv1_2, query1_2, "mv1_2") order_qt_query1_2_after "${query1_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_2""" @@ -199,7 +160,7 @@ suite("mv_ssb_test") { AND lo_quantity BETWEEN 26 AND 35; """ order_qt_query1_3before "${query1_3}" - check_rewrite(mv1_3, query1_3, "mv1_3") + check_mv_rewrite_success(db, mv1_3, query1_3, "mv1_3") order_qt_query1_3_after "${query1_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv1_3""" @@ -227,7 +188,7 @@ suite("mv_ssb_test") { ORDER BY d_year, p_brand; """ order_qt_query2_1before "${query2_1}" - check_rewrite(mv2_1, query2_1, "mv2_1") + check_mv_rewrite_success(db, mv2_1, query2_1, "mv2_1") order_qt_query2_1_after "${query2_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_1""" @@ -257,7 +218,7 @@ suite("mv_ssb_test") { ORDER BY d_year, p_brand; """ order_qt_query2_2before "${query2_2}" - check_rewrite(mv2_2, query2_2, "mv2_2") + check_mv_rewrite_success(db, mv2_2, query2_2, "mv2_2") order_qt_query2_2_after "${query2_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_2""" @@ -284,7 +245,7 @@ suite("mv_ssb_test") { ORDER BY d_year, p_brand; """ order_qt_query2_3before "${query2_3}" - check_rewrite(mv2_3, query2_3, "mv2_3") + check_mv_rewrite_success(db, mv2_3, query2_3, "mv2_3") order_qt_query2_3_after "${query2_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv2_3""" @@ -315,7 +276,7 @@ suite("mv_ssb_test") { ORDER BY d_year ASC, REVENUE DESC; """ order_qt_query3_1before "${query3_1}" - check_rewrite(mv3_1, query3_1, "mv3_1") + check_mv_rewrite_success(db, mv3_1, query3_1, "mv3_1") order_qt_query3_1_after "${query3_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_1""" @@ -347,7 +308,7 @@ suite("mv_ssb_test") { ORDER BY d_year ASC, REVENUE DESC; """ order_qt_query3_2before "${query3_2}" - check_rewrite(mv3_2, query3_2, "mv3_2") + check_mv_rewrite_success(db, mv3_2, query3_2, "mv3_2") order_qt_query3_2_after "${query3_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_2""" @@ -383,7 +344,7 @@ suite("mv_ssb_test") { ORDER BY d_year ASC, REVENUE DESC; """ order_qt_query3_3before "${query3_3}" - check_rewrite(mv3_3, query3_3, "mv3_3") + check_mv_rewrite_success(db, mv3_3, query3_3, "mv3_3") order_qt_query3_3_after "${query3_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_3""" @@ -419,7 +380,7 @@ suite("mv_ssb_test") { ORDER BY d_year ASC, REVENUE DESC; """ order_qt_query3_4before "${query3_4}" - check_rewrite(mv3_4, query3_4, "mv3_4") + check_mv_rewrite_success(db, mv3_4, query3_4, "mv3_4") order_qt_query3_4_after "${query3_4}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv3_4""" @@ -455,7 +416,7 @@ suite("mv_ssb_test") { ORDER BY d_year, c_nation; """ order_qt_query4_1before "${query4_1}" - check_rewrite(mv4_1, query4_1, "mv4_1") + check_mv_rewrite_success(db, mv4_1, query4_1, "mv4_1") order_qt_query4_1_after "${query4_1}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_1""" @@ -492,7 +453,7 @@ suite("mv_ssb_test") { ORDER BY d_year, s_nation, p_category; """ order_qt_query4_2before "${query4_2}" - check_rewrite(mv4_2, query4_2, "mv4_2") + check_mv_rewrite_success(db, mv4_2, query4_2, "mv4_2") order_qt_query4_2_after "${query4_2}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_2""" @@ -526,7 +487,7 @@ suite("mv_ssb_test") { ORDER BY d_year, s_city, p_brand; """ order_qt_query4_3before "${query4_3}" - check_rewrite(mv4_3, query4_3, "mv4_3") + check_mv_rewrite_success(db, mv4_3, query4_3, "mv4_3") order_qt_query4_3_after "${query4_3}" sql """ DROP MATERIALIZED VIEW IF EXISTS mv4_3""" }