This is an automated email from the ASF dual-hosted git repository.
morrySnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 4ac235afe55 [fix](mtmv) Check agg/window partition keys only for
tracked partition outputs (#65393)
4ac235afe55 is described below
commit 4ac235afe5586934de5481c524e2e7a8b1947af1
Author: foxtail463 <[email protected]>
AuthorDate: Sat Aug 1 11:58:18 2026 +0800
[fix](mtmv) Check agg/window partition keys only for tracked partition
outputs (#65393)
Problem Summary:
MV partition tracking could reject valid partitioned MVs when an
aggregate, window, or rewritten PartitionTopN exists on a branch that
does not carry the MV partition column. A typical case is a left join
where the MV partitions by the left table column, while the right
subquery has row_number() or group by on unrelated keys.
Solution:
Gate aggregate/window/partition-topn partition-key validation by whether
the current plan output contains a tracked MV partition slot. Add
LogicalPartitionTopN handling for rewritten row_number ... rn = 1
---------
Co-authored-by: yangtao555 <[email protected]>
---
.../mv/PartitionIncrementMaintainer.java | 90 +++++++++++---
.../exploration/mv/MaterializedViewUtilsTest.java | 82 +++++++++++-
.../cross_join_list_str_increment_create.groovy | 8 +-
.../cross_join_range_date_increment_create.groovy | 137 +++++++++++++++++++--
...cross_join_range_number_increment_create.groovy | 6 +-
.../inner_join_list_str_increment_create.groovy | 8 +-
.../inner_join_range_date_increment_create.groovy | 6 +-
...inner_join_range_number_increment_create.groovy | 8 +-
...left_anti_join_list_str_increment_create.groovy | 8 +-
...ft_anti_join_range_date_increment_create.groovy | 6 +-
..._anti_join_range_number_increment_create.groovy | 8 +-
.../left_join_list_str_increment_create.groovy | 8 +-
.../left_join_range_date_increment_create.groovy | 8 +-
.../left_join_range_number_increment_create.groovy | 6 +-
...left_semi_join_list_str_increment_create.groovy | 8 +-
...ft_semi_join_range_date_increment_create.groovy | 8 +-
..._semi_join_range_number_increment_create.groovy | 8 +-
17 files changed, 335 insertions(+), 78 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PartitionIncrementMaintainer.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PartitionIncrementMaintainer.java
index 4b29f95aeef..c35a06ed3b7 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PartitionIncrementMaintainer.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/PartitionIncrementMaintainer.java
@@ -48,6 +48,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalCatalogRelation;
import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.nereids.trees.plans.logical.LogicalLimit;
+import org.apache.doris.nereids.trees.plans.logical.LogicalPartitionTopN;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.trees.plans.logical.LogicalRelation;
import org.apache.doris.nereids.trees.plans.logical.LogicalResultSink;
@@ -60,6 +61,7 @@ import
org.apache.doris.nereids.trees.plans.visitor.DefaultPlanRewriter;
import org.apache.doris.nereids.trees.plans.visitor.DefaultPlanVisitor;
import org.apache.doris.nereids.types.DataType;
import org.apache.doris.nereids.util.ExpressionUtils;
+import org.apache.doris.nereids.util.ImmutableEqualSet;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
@@ -410,6 +412,9 @@ public class PartitionIncrementMaintainer {
@Override
public Void visitLogicalAggregate(LogicalAggregate<? extends Plan>
aggregate,
PartitionIncrementCheckContext context) {
+ if (!planOutputContainsPartitionColumnToCheck(aggregate, context))
{
+ return super.visitLogicalAggregate(aggregate, context);
+ }
Set<Expression> groupByExprSet = new
HashSet<>(aggregate.getGroupByExpressions());
if (groupByExprSet.isEmpty()) {
context.addFailReason("group by sets is empty, doesn't contain
the target partition");
@@ -426,6 +431,9 @@ public class PartitionIncrementMaintainer {
@Override
public Void visitLogicalWindow(LogicalWindow<? extends Plan> window,
PartitionIncrementCheckContext context) {
+ if (!planOutputContainsPartitionColumnToCheck(window, context)) {
+ return super.visitLogicalWindow(window, context);
+ }
List<NamedExpression> windowExpressions =
window.getWindowExpressions();
if (windowExpressions.isEmpty()) {
context.addFailReason("window expression is empty, doesn't
contain the target partition");
@@ -434,7 +442,7 @@ public class PartitionIncrementMaintainer {
return visit(window, context);
}
for (NamedExpression namedExpression : windowExpressions) {
- if (!checkWindowPartition(namedExpression, context)) {
+ if (!checkWindowPartition(namedExpression, window, context)) {
context.addFailReason("window partition sets doesn't
contain the target partition");
context.collectFailedTableSet(window);
context.setFailFast(true);
@@ -444,6 +452,29 @@ public class PartitionIncrementMaintainer {
return super.visitLogicalWindow(window, context);
}
+ @Override
+ public Void visitLogicalPartitionTopN(LogicalPartitionTopN<? extends
Plan> partitionTopN,
+ PartitionIncrementCheckContext context) {
+ if (!planOutputContainsPartitionColumnToCheck(partitionTopN,
context)) {
+ return super.visitLogicalPartitionTopN(partitionTopN, context);
+ }
+ if (partitionTopN.hasGlobalLimit()) {
+ // A global limit/topN selects the top rows across all
partitions rather than within
+ // each partition, so a change in one source partition can
move the global winner and
+ // affect multiple MV partitions. That breaks partition-local
maintenance, so reject it.
+ context.addFailReason("partition topN has global limit, which
is not partition local");
+ context.collectFailedTableSet(partitionTopN);
+ context.setFailFast(true);
+ return super.visitLogicalPartitionTopN(partitionTopN, context);
+ }
+ if
(!checkPartitionKeysContainPartitionToCheck(partitionTopN.getPartitionKeys(),
partitionTopN, context)) {
+ context.addFailReason("partition topN partition keys doesn't
contain the target partition");
+ context.collectFailedTableSet(partitionTopN);
+ context.setFailFast(true);
+ }
+ return super.visitLogicalPartitionTopN(partitionTopN, context);
+ }
+
@Override
public Void visit(Plan plan, PartitionIncrementCheckContext context) {
if (plan instanceof LogicalProject
@@ -456,6 +487,7 @@ public class PartitionIncrementMaintainer {
|| plan instanceof LogicalWindow
|| (plan instanceof LogicalUnion
&& ((LogicalUnion) plan).getQualifier() ==
SetOperation.Qualifier.ALL)
+ || plan instanceof LogicalPartitionTopN
|| plan instanceof LogicalCTEAnchor
|| plan instanceof LogicalCTEConsumer
|| plan instanceof LogicalCTEProducer
@@ -471,30 +503,58 @@ public class PartitionIncrementMaintainer {
return super.visit(plan, context);
}
- private boolean checkWindowPartition(Expression expression,
PartitionIncrementCheckContext context) {
+ private boolean checkWindowPartition(Expression expression, Plan
currentPlan,
+ PartitionIncrementCheckContext context) {
List<Object> windowExpressions =
expression.collectToList(expressionTreeNode ->
expressionTreeNode instanceof WindowExpression);
for (Object windowExpressionObj : windowExpressions) {
WindowExpression windowExpression = (WindowExpression)
windowExpressionObj;
- List<Expression> partitionKeys =
windowExpression.getPartitionKeys();
- Set<Column> originalPartitionbyExprSet = new HashSet<>();
- partitionKeys.forEach(groupExpr -> {
- if (groupExpr instanceof SlotReference &&
groupExpr.isColumnFromTable()) {
- originalPartitionbyExprSet.add(((SlotReference)
groupExpr).getOriginalColumn().get());
- }
- });
- Set<SlotReference> contextPartitionColumnSet =
getPartitionColumnsToCheck(context);
- if (contextPartitionColumnSet.isEmpty()) {
- return false;
- }
- if (contextPartitionColumnSet.stream().noneMatch(
- partition ->
originalPartitionbyExprSet.contains(partition.getOriginalColumn().get()))) {
+ if
(!checkPartitionKeysContainPartitionToCheck(windowExpression.getPartitionKeys(),
+ currentPlan, context)) {
return false;
}
}
return true;
}
+ private boolean
checkPartitionKeysContainPartitionToCheck(List<Expression> partitionKeys,
+ Plan currentPlan, PartitionIncrementCheckContext context) {
+ // Match by slot exprId, not catalog Column: Column.equals ignores
the owning table, so an
+ // unrelated same-schema column (e.g. l.p vs r.p) would be wrongly
accepted as the tracked key.
+ Set<SlotReference> partitionKeySlotSet = new HashSet<>();
+ partitionKeys.forEach(partitionKey -> {
+ if (partitionKey instanceof SlotReference &&
partitionKey.isColumnFromTable()) {
+ partitionKeySlotSet.add((SlotReference) partitionKey);
+ }
+ });
+ Set<SlotReference> contextPartitionColumnSet =
getPartitionColumnsToCheck(context);
+ if (contextPartitionColumnSet.isEmpty()) {
+ return false;
+ }
+ if
(contextPartitionColumnSet.stream().anyMatch(partitionKeySlotSet::contains)) {
+ return true;
+ }
+ // Also accept a key that is a different slot but proven equal to
the tracked column, e.g.
+ // window over (partition by r.p) on an inner join l.p = r.p, or a
forwarding alias p AS p_alias.
+ // currentPlan's DataTrait carries these equalities (bottom-up)
even though this top-down check
+ // runs before the join equalities reach the context.
+ ImmutableEqualSet<Slot> equalSet =
currentPlan.getLogicalProperties().getTrait().getEqualSet();
+ return contextPartitionColumnSet.stream().anyMatch(contextSlot ->
+ partitionKeySlotSet.stream().anyMatch(keySlot ->
equalSet.isEqual(contextSlot, keySlot)));
+ }
+
+ private boolean planOutputContainsPartitionColumnToCheck(Plan plan,
PartitionIncrementCheckContext context) {
+ Set<Slot> outputSet = plan.getOutputSet();
+ for (NamedExpression namedExpression :
context.getPartitionAndRefExpressionMap().keySet()) {
+ // Plan outputs are slots, so only tracked partition
expressions already resolved
+ // to slots can match here.
+ if (namedExpression instanceof Slot &&
outputSet.contains(namedExpression)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
private Set<SlotReference>
getPartitionColumnsToCheck(PartitionIncrementCheckContext context) {
Set<NamedExpression> partitionExpressionSet =
context.getPartitionAndRefExpressionMap().keySet();
Set<SlotReference> partitionSlotSet = new HashSet<>();
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
index 03563d5f892..27143e16406 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewUtilsTest.java
@@ -643,6 +643,80 @@ public class MaterializedViewUtilsTest extends
TestWithFeService {
});
}
+ @Test
+ public void getRelatedTableInfoTestWithUnrelatedRightWindowTest() {
+ PlanChecker.from(connectContext)
+ .checkExplain("SELECT l.L_SHIPDATE, l.L_ORDERKEY,
o.O_ORDERDATE "
+ + "FROM lineitem as l "
+ + "LEFT JOIN ("
+ + "SELECT O_ORDERKEY, O_ORDERDATE, "
+ + "ROW_NUMBER() OVER (PARTITION BY O_ORDERKEY
ORDER BY O_ORDERDATE DESC) AS rn "
+ + "FROM orders"
+ + ") as o "
+ + "ON l.L_ORDERKEY = o.O_ORDERKEY AND o.rn =
1",
+ nereidsPlanner -> {
+ Plan rewrittenPlan =
nereidsPlanner.getRewrittenPlan();
+ RelatedTableInfo relatedTableInfo =
+
MaterializedViewUtils.getRelatedTableInfo("L_SHIPDATE", null,
+ rewrittenPlan,
nereidsPlanner.getCascadesContext());
+
Assertions.assertTrue(relatedTableInfo.isPctPossible(),
relatedTableInfo.getFailReason());
+ checkRelatedTableInfo(relatedTableInfo,
+ "lineitem",
+ "L_SHIPDATE",
+ true);
+ });
+ }
+
+ @Test
+ public void getRelatedTableInfoTestWithUnrelatedSameSchemaWindowTest() {
+ // t1 and t2 come from the same table, so t1.L_SHIPDATE and
t2.L_SHIPDATE share an identical
+ // catalog Column definition but belong to different table instances.
The MV partitions by
+ // t1.L_SHIPDATE while the row_number() partitions by the unrelated
t2.L_SHIPDATE, and the join
+ // condition is on L_ORDERKEY so the two shipdate slots are NOT in the
same equal set. Partition
+ // tracking must reject this: matching by bare Column would wrongly
treat t2.L_SHIPDATE as the
+ // tracked partition key and allow stale rows after a partition-only
refresh.
+ PlanChecker.from(connectContext)
+ .checkExplain("SELECT t1.L_SHIPDATE, t1.L_ORDERKEY "
+ + "FROM lineitem t1 "
+ + "LEFT JOIN ("
+ + "SELECT L_ORDERKEY, L_SHIPDATE, "
+ + "ROW_NUMBER() OVER (PARTITION BY L_SHIPDATE
ORDER BY L_PARTKEY DESC) AS rn "
+ + "FROM lineitem"
+ + ") as t2 "
+ + "ON t1.L_ORDERKEY = t2.L_ORDERKEY AND t2.rn
= 1",
+ nereidsPlanner -> {
+ Plan rewrittenPlan =
nereidsPlanner.getRewrittenPlan();
+ RelatedTableInfo relatedTableInfo =
+
MaterializedViewUtils.getRelatedTableInfo("L_SHIPDATE", null,
+ rewrittenPlan,
nereidsPlanner.getCascadesContext());
+
Assertions.assertFalse(relatedTableInfo.isPctPossible());
+ });
+ }
+
+ @Test
+ public void getRelatedTableInfoTestWithUnrelatedRightAggregateTest() {
+ PlanChecker.from(connectContext)
+ .checkExplain("SELECT l.L_SHIPDATE, l.L_ORDERKEY,
o.max_orderdate "
+ + "FROM lineitem as l "
+ + "LEFT JOIN ("
+ + "SELECT O_ORDERKEY, max(O_ORDERDATE) AS
max_orderdate "
+ + "FROM orders "
+ + "GROUP BY O_ORDERKEY"
+ + ") as o "
+ + "ON l.L_ORDERKEY = o.O_ORDERKEY",
+ nereidsPlanner -> {
+ Plan rewrittenPlan =
nereidsPlanner.getRewrittenPlan();
+ RelatedTableInfo relatedTableInfo =
+
MaterializedViewUtils.getRelatedTableInfo("L_SHIPDATE", null,
+ rewrittenPlan,
nereidsPlanner.getCascadesContext());
+
Assertions.assertTrue(relatedTableInfo.isPctPossible(),
relatedTableInfo.getFailReason());
+ checkRelatedTableInfo(relatedTableInfo,
+ "lineitem",
+ "L_SHIPDATE",
+ true);
+ });
+ }
+
@Test
public void getRelatedTableInfoTestWithLimitTest() {
PlanChecker.from(connectContext)
@@ -881,9 +955,11 @@ public class MaterializedViewUtilsTest extends
TestWithFeService {
RelatedTableInfo relatedTableInfo =
MaterializedViewUtils.getRelatedTableInfo("upgrade_day", null,
rewrittenPlan,
nereidsPlanner.getCascadesContext());
-
Assertions.assertTrue(relatedTableInfo.getFailReason().contains(
- "partition column is not in group by or
window partition by"));
-
Assertions.assertFalse(relatedTableInfo.isPctPossible());
+
Assertions.assertTrue(relatedTableInfo.isPctPossible(),
relatedTableInfo.getFailReason());
+ checkRelatedTableInfo(relatedTableInfo,
+ "test1",
+ "upgrade_day",
+ true);
});
}
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_list_str_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_list_str_increment_create.groovy
index 52c452ca399..2d6f8fe10e8 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_list_str_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_list_str_increment_create.groovy
@@ -345,12 +345,12 @@ suite("cross_join_list_str_increment_create",
"increment_create") {
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17,
mv_sql_18]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_8, mv_sql_14]
def sql_complete_list = []
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -375,9 +375,9 @@ suite("cross_join_list_str_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_14]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list, partition_by_part_col, slave_tb_change, is_complete_change)
// create mv base on left table with no partition col
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_date_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_date_increment_create.groovy
index 177be30e7b3..295e21398b7 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_date_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_date_increment_create.groovy
@@ -175,17 +175,23 @@ suite("cross_join_range_date_increment_create",
"increment_create") {
assert (refresh_info[0][5] == "100.00% (6/6)")
}
+ // use a fresh l_orderkey each call so the change is a new group, not a
group-by-folded duplicate
+ def primary_change_counter = 100
def primary_tb_change = {
sql """
- insert into lineitem_cross_2 values
- (2, 3, 2, 2, 5.5, 6.5, 7.5, 8.5, 'o', 'k', '2023-10-17', '2023-10-17',
'a', 'b', 'yyyyyyyyy', '2023-10-17');
+ insert into lineitem_cross_2 values
+ (${primary_change_counter}, 3, 2, 2, 5.5, 6.5, 7.5, 8.5, 'o', 'k',
'2023-10-17', '2023-10-17', 'a', 'b', 'yyyyyyyyy', '2023-10-17');
"""
+ primary_change_counter++
}
+ // use a fresh o_orderkey each call so the change is a new group, not a
group-by-folded duplicate
+ def slave_change_counter = 100
def slave_tb_change = {
sql"""
- insert into orders_cross_2 values
- (2, 5, 'ok', 99.5, 'a', 'b', 1, 'yy', '2023-10-17');
+ insert into orders_cross_2 values
+ (${slave_change_counter}, 5, 'ok', 99.5, 'a', 'b', 1, 'yy',
'2023-10-17');
"""
+ slave_change_counter++
}
// no window func + on partition col
@@ -336,12 +342,12 @@ suite("cross_join_range_date_increment_create",
"increment_create") {
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17,
mv_sql_18]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_7, mv_sql_13]
def sql_complete_list = []
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -366,9 +372,9 @@ suite("cross_join_range_date_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_13]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
@@ -393,4 +399,119 @@ suite("cross_join_range_date_increment_create",
"increment_create") {
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_not_part_col_right, slave_tb_change,
is_complete_change)
+ // Focused cases the cross-join matrix above cannot express:
identity/equality-class partition-key
+ // matching and the global-limit guard. Dedicated tables keep them
isolated from the matrix state.
+ sql "drop table if exists identity_left"
+ sql "drop table if exists identity_right"
+ sql """CREATE TABLE identity_left (
+ id BIGINT NULL,
+ score BIGINT NULL,
+ p DATE NOT NULL
+ ) ENGINE=OLAP DUPLICATE KEY(id)
+ auto partition by range (date_trunc(`p`, 'day')) ()
+ DISTRIBUTED BY HASH(id) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1");"""
+ // identity_right is defined identically to identity_left so only
slot/exprId identity, not
+ // catalog Column.equals, can distinguish identity_left.p from
identity_right.p
+ sql """CREATE TABLE identity_right (
+ id BIGINT NULL,
+ score BIGINT NULL,
+ p DATE NOT NULL
+ ) ENGINE=OLAP DUPLICATE KEY(id)
+ auto partition by range (date_trunc(`p`, 'day')) ()
+ DISTRIBUTED BY HASH(id) BUCKETS 1
+ PROPERTIES ("replication_allocation" = "tag.location.default: 1");"""
+ sql """insert into identity_left values
(1,10,'2023-10-17'),(2,20,'2023-10-18');"""
+ sql """insert into identity_right values
(1,5,'2023-10-17'),(2,50,'2023-10-18');"""
+ sql """analyze table identity_left with sync;"""
+ sql """analyze table identity_right with sync;"""
+
+ def identity_mv = "mv_identity_focus"
+ def drop_identity_mv = {
+ sql """DROP MATERIALIZED VIEW IF EXISTS ${identity_mv};"""
+ sql """DROP TABLE IF EXISTS ${identity_mv};"""
+ }
+
+ // negative: unrelated same-schema column (window partition by
identity_right.p, no equality) must be rejected
+ drop_identity_mv()
+ test {
+ sql """
+ CREATE MATERIALIZED VIEW ${identity_mv}
+ BUILD IMMEDIATE REFRESH AUTO ON MANUAL
+ partition by(p)
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1')
+ AS
+ select identity_left.p, identity_left.id,
+ count(identity_right.score) over (partition by identity_right.p order
by identity_right.id) as wc
+ from identity_left cross join identity_right
+ """
+ exception "Unable to find a suitable base table for partitioning"
+ }
+
+ // negative: global-limit PartitionTopN (order by rn limit N over a
window) is not partition-local
+ drop_identity_mv()
+ test {
+ sql """
+ CREATE MATERIALIZED VIEW ${identity_mv}
+ BUILD IMMEDIATE REFRESH AUTO ON MANUAL
+ partition by(p)
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1')
+ AS
+ select p, id, rn from (
+ select identity_left.p as p, identity_left.id as id,
+ row_number() over (partition by identity_left.p order by
identity_left.score desc) as rn
+ from identity_left
+ ) v order by rn limit 5
+ """
+ exception "Unable to find a suitable base table for partitioning"
+ }
+
+ // positive: inner-join equality identity_left.p = identity_right.p
accepts window partition by identity_right.p; expect PARTIAL refresh
+ drop_identity_mv()
+ sql """
+ CREATE MATERIALIZED VIEW ${identity_mv}
+ BUILD IMMEDIATE REFRESH AUTO ON MANUAL
+ partition by(p)
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1')
+ AS
+ select identity_left.p, identity_left.id,
+ count(identity_right.score) over (partition by identity_right.p order by
identity_right.id) as wc
+ from identity_left inner join identity_right on identity_left.p =
identity_right.p
+ """
+ def identity_job = getJobName(db, identity_mv)
+ waitingMTMVTaskFinishedWithoutAnalyze(identity_job)
+ sql """insert into identity_left values (100, 999, '2023-10-17');"""
+ sql """refresh MATERIALIZED VIEW ${identity_mv} AUTO"""
+ waitingMTMVTaskFinishedWithoutAnalyze(identity_job)
+ def identity_refresh = sql """select Status, RefreshMode,
NeedRefreshPartitions, Progress
+ from tasks("type"="mv") where JobName="${identity_job}" order by
CreateTime desc limit 1;"""
+ assert (identity_refresh[0][0] == "SUCCESS")
+ assert (identity_refresh[0][1] == "PARTIAL")
+ assert (identity_refresh[0][2] == "[\"p_20231017_20231018\"]")
+ assert (identity_refresh[0][3] == "100.00% (1/1)")
+
+ // positive: forwarding alias p_alias equals the window key
identity_left.p despite a different ExprId
+ drop_identity_mv()
+ sql """
+ CREATE MATERIALIZED VIEW ${identity_mv}
+ BUILD IMMEDIATE REFRESH AUTO ON MANUAL
+ partition by(p_alias)
+ DISTRIBUTED BY RANDOM BUCKETS 2
+ PROPERTIES ('replication_num' = '1')
+ AS
+ select p_alias, id, wc from (
+ select identity_left.p as p_alias, identity_left.id as id,
+ count(identity_left.score) over (partition by identity_left.p order by
identity_left.id) as wc
+ from identity_left
+ ) v
+ """
+ def alias_job = getJobName(db, identity_mv)
+ waitingMTMVTaskFinishedWithoutAnalyze(alias_job)
+ def alias_built = sql """select Status from tasks("type"="mv") where
JobName="${alias_job}" order by CreateTime desc limit 1;"""
+ assert (alias_built[0][0] == "SUCCESS")
+ drop_identity_mv()
+
}
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_number_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_number_increment_create.groovy
index db47cea0e53..d91b1282715 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_number_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/cross_join_range_number_increment_create.groovy
@@ -351,7 +351,7 @@ suite("cross_join_range_number_increment_create",
"increment_create") {
// change left table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -376,9 +376,9 @@ suite("cross_join_range_number_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_14]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_list_str_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_list_str_increment_create.groovy
index 6e80b94c4cc..22ec46b801c 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_list_str_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_list_str_increment_create.groovy
@@ -370,7 +370,7 @@ suite("inner_join_list_str_increment_create",
"increment_create") {
// change left table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_10, mv_sql_11, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -382,7 +382,7 @@ suite("inner_join_list_str_increment_create",
"increment_create") {
partition_by_not_part_col, primary_tb_change, is_complete_change)
// create mv base on right table with partition col
- sql_error_list = [mv_sql_7, mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
sql_increment_list = []
sql_complete_list = [mv_sql_1, mv_sql_3]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
@@ -396,7 +396,7 @@ suite("inner_join_list_str_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
sql_increment_list = [mv_sql_4, mv_sql_6, mv_sql_8, mv_sql_14]
sql_complete_list = [mv_sql_1, mv_sql_3]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
@@ -411,7 +411,7 @@ suite("inner_join_list_str_increment_create",
"increment_create") {
partition_by_not_part_col, slave_tb_change, is_complete_change)
// create mv base on right table with partition col
- sql_error_list = [mv_sql_7, mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_11,
mv_sql_17]
sql_complete_list = []
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_date_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_date_increment_create.groovy
index aa17f27df12..d7007cb4082 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_date_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_date_increment_create.groovy
@@ -361,7 +361,7 @@ suite("inner_join_range_date_increment_create",
"increment_create") {
// change left table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -386,9 +386,9 @@ suite("inner_join_range_date_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
sql_increment_list = [mv_sql_1, mv_sql_3]
- sql_complete_list = [mv_sql_4, mv_sql_6, mv_sql_7]
+ sql_complete_list = [mv_sql_4, mv_sql_6, mv_sql_7, mv_sql_13]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_number_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_number_increment_create.groovy
index 5caf3346fa7..caabd8a5ee8 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_number_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/inner_join_range_number_increment_create.groovy
@@ -371,7 +371,7 @@ suite("inner_join_range_number_increment_create",
"increment_create") {
// change left table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -382,7 +382,7 @@ suite("inner_join_range_number_increment_create",
"increment_create") {
partition_by_not_part_col, primary_tb_change, is_complete_change)
// create mv base on right table with partition col
- sql_error_list = [mv_sql_7, mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
sql_increment_list = []
sql_complete_list = [mv_sql_1, mv_sql_3]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
@@ -396,7 +396,7 @@ suite("inner_join_range_number_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12,
mv_sql_13, mv_sql_15, mv_sql_16, mv_sql_17, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
sql_increment_list = [mv_sql_4, mv_sql_6, mv_sql_8, mv_sql_14]
sql_complete_list = [mv_sql_1, mv_sql_3]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
@@ -411,7 +411,7 @@ suite("inner_join_range_number_increment_create",
"increment_create") {
partition_by_not_part_col, slave_tb_change, is_complete_change)
// create mv base on right table with partition col
- sql_error_list = [mv_sql_7, mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_12,
mv_sql_13, mv_sql_14, mv_sql_15, mv_sql_16, mv_sql_18]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12, mv_sql_13,
mv_sql_15, mv_sql_16, mv_sql_18]
sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_11,
mv_sql_17]
sql_complete_list = []
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_list_str_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_list_str_increment_create.groovy
index ea903cfee6f..f22f8f90169 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_list_str_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_list_str_increment_create.groovy
@@ -302,12 +302,12 @@ suite("left_anti_join_list_str_increment_create",
"increment_create") {
}
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_8, mv_sql_11]
def sql_complete_list = []
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -328,9 +328,9 @@ suite("left_anti_join_list_str_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_11]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_date_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_date_increment_create.groovy
index 48222c90153..941de5362f3 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_date_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_date_increment_create.groovy
@@ -298,7 +298,7 @@ suite("left_anti_join_range_date_increment_create",
"increment_create") {
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_11, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -319,9 +319,9 @@ suite("left_anti_join_range_date_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_11, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_10]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_number_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_number_increment_create.groovy
index aa5f7d353f9..b8318233dc5 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_number_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_anti_join_range_number_increment_create.groovy
@@ -301,13 +301,13 @@ suite("left_anti_join_range_number_increment_create",
"increment_create") {
}
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_8, mv_sql_11]
def sql_complete_list = []
def sql_error_list = []
// change left table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -328,9 +328,9 @@ suite("left_anti_join_range_number_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_11]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_list_str_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_list_str_increment_create.groovy
index e5c1226fee6..a0c421a5cd8 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_list_str_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_list_str_increment_create.groovy
@@ -302,12 +302,12 @@ suite("left_join_list_str_increment_create",
"increment_create") {
}
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_8, mv_sql_11]
def sql_complete_list = []
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -328,9 +328,9 @@ suite("left_join_list_str_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_11]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_date_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_date_increment_create.groovy
index 131ef47097c..c873e92677f 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_date_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_date_increment_create.groovy
@@ -293,12 +293,12 @@ suite("left_join_range_date_increment_create",
"increment_create") {
}
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_7, mv_sql_10]
def sql_complete_list = []
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_11, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -319,9 +319,9 @@ suite("left_join_range_date_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_11, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_10]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_number_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_number_increment_create.groovy
index 34e8cd99c0a..6aeee93e683 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_number_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_join_range_number_increment_create.groovy
@@ -306,7 +306,7 @@ suite("left_join_range_number_increment_create",
"increment_create") {
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -327,9 +327,9 @@ suite("left_join_range_number_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_11]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_list_str_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_list_str_increment_create.groovy
index dcf253b9bb5..f382d3a0a81 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_list_str_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_list_str_increment_create.groovy
@@ -302,12 +302,12 @@ suite("left_semi_join_list_str_increment_create",
"increment_create") {
}
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_8, mv_sql_11]
def sql_complete_list = []
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ def sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -328,9 +328,9 @@ suite("left_semi_join_list_str_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_11]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_date_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_date_increment_create.groovy
index 42483f055ec..7c7342b3534 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_date_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_date_increment_create.groovy
@@ -293,12 +293,12 @@ suite("left_semi_join_range_date_increment_create",
"increment_create") {
}
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_7, mv_sql_10]
def sql_complete_list = []
// change left table data
// create mv base on left table with partition col
- def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ def sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_11, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -319,9 +319,9 @@ suite("left_semi_join_range_date_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_8, mv_sql_9, mv_sql_11, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_10]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
diff --git
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_number_increment_create.groovy
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_number_increment_create.groovy
index 34d14e9cefa..9a91d8c5ca8 100644
---
a/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_number_increment_create.groovy
+++
b/regression-test/suites/nereids_rules_p0/mv/increment_create/left_semi_join_range_number_increment_create.groovy
@@ -301,13 +301,13 @@ suite("left_semi_join_range_number_increment_create",
"increment_create") {
}
def sql_all_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_7,
mv_sql_8, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
- def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ def sql_increment_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6,
mv_sql_8, mv_sql_11]
def sql_complete_list = []
def sql_error_list = []
// change left table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, primary_tb_change, is_complete_change)
@@ -328,9 +328,9 @@ suite("left_semi_join_range_number_increment_create",
"increment_create") {
// change right table data
// create mv base on left table with partition col
- sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_11, mv_sql_12]
+ sql_error_list = [mv_sql_7, mv_sql_9, mv_sql_10, mv_sql_12]
sql_increment_list = []
- sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8]
+ sql_complete_list = [mv_sql_1, mv_sql_3, mv_sql_4, mv_sql_6, mv_sql_8,
mv_sql_11]
list_judgement(sql_all_list, sql_increment_list, sql_complete_list,
sql_error_list,
partition_by_part_col, slave_tb_change, is_complete_change)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]