This is an automated email from the ASF dual-hosted git repository.
lihaopeng 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 fb27e3ef31 [fix](planner) let OlapScanNode turn off preaggragation
when there is a filter on DELETE_SIGN (#12118)
fb27e3ef31 is described below
commit fb27e3ef31fc56479999e9a41ebe91db48f1ff94
Author: Yongqiang YANG <[email protected]>
AuthorDate: Tue Aug 30 15:54:37 2022 +0800
[fix](planner) let OlapScanNode turn off preaggragation when there is a
filter on DELETE_SIGN (#12118)
We can skip aggregate on replace column, otherwise it would generate
wrong result. e.g. a row in UNIQUE is deleted by delte_sign_column,
then it would be returned.
---
.../org/apache/doris/planner/OlapScanNode.java | 6 ++-
.../data/delete_p0/test_delete_sign_mow.out | 52 ++++++++++++++++++++++
.../data/delete_p0/test_delete_sign_unique.out | 52 ++++++++++++++++++++++
.../suites/delete_p0/test_delete_sign_mow.sql | 32 +++++++++++++
.../suites/delete_p0/test_delete_sign_unique.sql | 32 +++++++++++++
5 files changed, 173 insertions(+), 1 deletion(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
index 5b010be574..967895ee4e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java
@@ -171,7 +171,8 @@ public class OlapScanNode extends ScanNode {
public void setIsPreAggregation(boolean isPreAggregation, String reason) {
this.isPreAggregation = isPreAggregation;
- this.reasonOfPreAggregation = reason;
+ this.reasonOfPreAggregation = this.reasonOfPreAggregation == null ?
reason :
+ this.reasonOfPreAggregation + " " +
reason;
}
public boolean isPreAggregation() {
@@ -1044,6 +1045,9 @@ public class OlapScanNode extends ScanNode {
Expr conjunct = new BinaryPredicate(BinaryPredicate.Operator.EQ,
deleteSignSlot, new IntLiteral(0));
conjunct.analyze(analyzer);
conjuncts.add(conjunct);
+ if (!olapTable.getEnableUniqueKeyMergeOnWrite()) {
+ closePreAggregation(Column.DELETE_SIGN + " is used as
conjuncts.");
+ }
}
}
diff --git a/regression-test/data/delete_p0/test_delete_sign_mow.out
b/regression-test/data/delete_p0/test_delete_sign_mow.out
new file mode 100644
index 0000000000..fabf3e3e71
--- /dev/null
+++ b/regression-test/data/delete_p0/test_delete_sign_mow.out
@@ -0,0 +1,52 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !test_delete_sign_mow --
+0
+
+-- !test_delete_sign_mow_2 --
+0
+
+-- !test_delete_sign_mow_3 --
+1
+
+-- !test_delete_sign_mow_4 --
+1
+
+-- !test_delete_sign_mow_5 --
+1
+
+-- !test_delete_sign_mow_6 --
+1
+
+-- !test_delete_sign_mow_7 --
+1
+
+-- !test_delete_sign_mow_8 --
+1
+
+-- !test_delete_sign_mow_9 --
+1
+
+-- !test_delete_sign_mow_10 --
+2
+
+-- !test_delete_sign_mow_11 --
+2
+
+-- !test_delete_sign_mow_12 --
+1
+
+-- !test_delete_sign_mow_13 --
+1
+
+-- !test_delete_sign_mow_14 --
+1
+
+-- !test_delete_sign_mow_15 --
+1
+
+-- !test_delete_sign_mow_16 --
+0
+
+-- !test_delete_sign_mow_17 --
+0
+
diff --git a/regression-test/data/delete_p0/test_delete_sign_unique.out
b/regression-test/data/delete_p0/test_delete_sign_unique.out
new file mode 100644
index 0000000000..d62aa995fa
--- /dev/null
+++ b/regression-test/data/delete_p0/test_delete_sign_unique.out
@@ -0,0 +1,52 @@
+-- This file is automatically generated. You should know what you did if you
want to edit this
+-- !test_delete_sign_unique --
+0
+
+-- !test_delete_sign_unique_2 --
+0
+
+-- !test_delete_sign_unique_3 --
+1
+
+-- !test_delete_sign_unique_4 --
+1
+
+-- !test_delete_sign_unique_5 --
+1
+
+-- !test_delete_sign_unique_6 --
+1
+
+-- !test_delete_sign_unique_7 --
+1
+
+-- !test_delete_sign_unique_8 --
+1
+
+-- !test_delete_sign_unique_9 --
+1
+
+-- !test_delete_sign_unique_10 --
+2
+
+-- !test_delete_sign_unique_11 --
+2
+
+-- !test_delete_sign_unique_12 --
+1
+
+-- !test_delete_sign_unique_13 --
+1
+
+-- !test_delete_sign_unique_14 --
+1
+
+-- !test_delete_sign_unique_15 --
+1
+
+-- !test_delete_sign_unique_16 --
+0
+
+-- !test_delete_sign_unique_17 --
+0
+
diff --git a/regression-test/suites/delete_p0/test_delete_sign_mow.sql
b/regression-test/suites/delete_p0/test_delete_sign_mow.sql
new file mode 100644
index 0000000000..a6387bd231
--- /dev/null
+++ b/regression-test/suites/delete_p0/test_delete_sign_mow.sql
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS delete_sign_test_mow;
+
+CREATE TABLE delete_sign_test_mow (
+ `uid` BIGINT NULL,
+ `v1` BIGINT NULL
+ )
+UNIQUE KEY(uid)
+DISTRIBUTED BY HASH(uid) BUCKETS 3
+PROPERTIES (
+ "unique_key_merge_on_write" = "true",
+ "replication_num" = "1"
+);
+
+insert into delete_sign_test_mow values(1, 1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow values(1, 1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow values(2, 1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow(uid, v1, __DORIS_DELETE_SIGN__) values(1, 1,
1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
+
+insert into delete_sign_test_mow(uid, v1, __DORIS_DELETE_SIGN__) values(2, 1,
1);
+select count(uid) from delete_sign_test_mow;
+select count(distinct uid) from delete_sign_test_mow;
diff --git a/regression-test/suites/delete_p0/test_delete_sign_unique.sql
b/regression-test/suites/delete_p0/test_delete_sign_unique.sql
new file mode 100644
index 0000000000..3089937b12
--- /dev/null
+++ b/regression-test/suites/delete_p0/test_delete_sign_unique.sql
@@ -0,0 +1,32 @@
+DROP TABLE IF EXISTS delete_sign_test;
+
+CREATE TABLE delete_sign_test (
+ `uid` BIGINT NULL,
+ `v1` BIGINT NULL
+ )
+UNIQUE KEY(uid)
+DISTRIBUTED BY HASH(uid) BUCKETS 3
+PROPERTIES (
+ "replication_num" = "1"
+);
+
+insert into delete_sign_test values(1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test values(1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test values(2, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test(uid, v1, __DORIS_DELETE_SIGN__) values(1, 1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
+insert into delete_sign_test(uid, v1, __DORIS_DELETE_SIGN__) values(2, 1, 1);
+select count(uid) from delete_sign_test;
+select count(distinct uid) from delete_sign_test;
+
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]