This is an automated email from the ASF dual-hosted git repository.

cambyzju pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.1 by this push:
     new e2350403a60 [fix](plan) fix wrong result for random distributed agg 
table with all keys not null (#36271)
e2350403a60 is described below

commit e2350403a60beff25db059a73bd857b757d985a5
Author: camby <camby...@tencent.com>
AuthorDate: Tue Jun 18 11:25:31 2024 +0800

    [fix](plan) fix wrong result for random distributed agg table with all keys 
not null (#36271)
---
 .../java/org/apache/doris/catalog/OlapTable.java   |  4 +++
 .../plans/logical/LogicalCatalogRelation.java      | 23 +++++++++--------
 .../aggregate/select_random_distributed_tbl.out    | 12 +++++++++
 .../aggregate/select_random_distributed_tbl.groovy | 29 +++++++++++++++++++++-
 4 files changed, 57 insertions(+), 11 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index d901d2340fb..fa6425c72af 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -868,6 +868,10 @@ public class OlapTable extends Table implements 
MTMVRelatedTableIf {
         return distributionColumnNames;
     }
 
+    public boolean isRandomDistribution() {
+        return defaultDistributionInfo instanceof RandomDistributionInfo;
+    }
+
     public void renamePartition(String partitionName, String newPartitionName) 
{
         if (partitionInfo.getType() == PartitionType.UNPARTITIONED) {
             // bug fix
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
index 277695be079..4d8fba447b3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalCatalogRelation.java
@@ -137,18 +137,21 @@ public abstract class LogicalCatalogRelation extends 
LogicalRelation implements
     @Override
     public void computeUnique(FunctionalDependencies.Builder fdBuilder) {
         Set<Slot> outputSet = Utils.fastToImmutableSet(getOutputSet());
-        if (table instanceof OlapTable && ((OlapTable) 
table).getKeysType().isAggregationFamily()) {
-            ImmutableSet.Builder<Slot> uniqSlots = 
ImmutableSet.builderWithExpectedSize(outputSet.size());
-            for (Slot slot : outputSet) {
-                if (!(slot instanceof SlotReference)) {
-                    continue;
-                }
-                SlotReference slotRef = (SlotReference) slot;
-                if (slotRef.getColumn().isPresent() && 
slotRef.getColumn().get().isKey()) {
-                    uniqSlots.add(slot);
+        if (table instanceof OlapTable) {
+            OlapTable olapTable = (OlapTable) table;
+            if (olapTable.getKeysType().isAggregationFamily() && 
!olapTable.isRandomDistribution()) {
+                ImmutableSet.Builder<Slot> uniqSlots = 
ImmutableSet.builderWithExpectedSize(outputSet.size());
+                for (Slot slot : outputSet) {
+                    if (!(slot instanceof SlotReference)) {
+                        continue;
+                    }
+                    SlotReference slotRef = (SlotReference) slot;
+                    if (slotRef.getColumn().isPresent() && 
slotRef.getColumn().get().isKey()) {
+                        uniqSlots.add(slot);
+                    }
                 }
+                fdBuilder.addUniqueSlot(uniqSlots.build());
             }
-            fdBuilder.addUniqueSlot(uniqSlots.build());
         }
 
         for (PrimaryKeyConstraint c : table.getPrimaryKeyConstraints()) {
diff --git 
a/regression-test/data/query_p0/aggregate/select_random_distributed_tbl.out 
b/regression-test/data/query_p0/aggregate/select_random_distributed_tbl.out
index 1afb2a06762..c03e72c8f9e 100644
--- a/regression-test/data/query_p0/aggregate/select_random_distributed_tbl.out
+++ b/regression-test/data/query_p0/aggregate/select_random_distributed_tbl.out
@@ -215,3 +215,15 @@
 -- !sql_16 --
 2
 
+-- !sql_17 --
+1
+
+-- !sql_18 --
+1
+
+-- !sql_19 --
+1
+
+-- !sql_20 --
+1
+
diff --git 
a/regression-test/suites/query_p0/aggregate/select_random_distributed_tbl.groovy
 
b/regression-test/suites/query_p0/aggregate/select_random_distributed_tbl.groovy
index ff0df74589a..439559aa5e0 100644
--- 
a/regression-test/suites/query_p0/aggregate/select_random_distributed_tbl.groovy
+++ 
b/regression-test/suites/query_p0/aggregate/select_random_distributed_tbl.groovy
@@ -131,4 +131,31 @@ suite("select_random_distributed_tbl") {
     }
 
     sql "drop table ${tableName};"
-}
\ No newline at end of file
+
+    // test all keys are NOT NULL for AGG table
+    sql "drop table if exists random_distributed_tbl_test_2;"
+    sql """ CREATE TABLE random_distributed_tbl_test_2 (
+        `k1` LARGEINT NOT NULL
+    ) ENGINE=OLAP
+    AGGREGATE KEY(`k1`)
+    COMMENT 'OLAP'
+    DISTRIBUTED BY RANDOM BUCKETS 10
+    PROPERTIES (
+        "replication_num" = "1"
+    );
+    """
+
+    sql """ insert into random_distributed_tbl_test_2 values(1); """
+    sql """ insert into random_distributed_tbl_test_2 values(1); """
+    sql """ insert into random_distributed_tbl_test_2 values(1); """
+
+    sql "set enable_nereids_planner = false;"
+    qt_sql_17 "select k1 from random_distributed_tbl_test_2;"
+    qt_sql_18 "select distinct k1 from random_distributed_tbl_test_2;"
+
+    sql "set enable_nereids_planner = true;"
+    qt_sql_19 "select k1 from random_distributed_tbl_test_2;"
+    qt_sql_20 "select distinct k1 from random_distributed_tbl_test_2;"
+
+    sql "drop table random_distributed_tbl_test_2;"
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to