[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
This commit is contained in:
@ -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 -> {
|
||||
|
||||
@ -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})")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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"""
|
||||
}
|
||||
|
||||
@ -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"""
|
||||
}
|
||||
|
||||
@ -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}"""
|
||||
}
|
||||
@ -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"""
|
||||
}
|
||||
@ -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"""
|
||||
}
|
||||
|
||||
@ -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"""
|
||||
}
|
||||
|
||||
@ -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"""
|
||||
}
|
||||
|
||||
@ -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"""
|
||||
}
|
||||
|
||||
@ -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"""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user