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 d901d2340fb691..fa6425c72aff01 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 Set getDistributionColumnNames() { 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 277695be0796d3..4d8fba447b329e 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 FunctionalDependencies computeFuncDeps() { @Override public void computeUnique(FunctionalDependencies.Builder fdBuilder) { Set outputSet = Utils.fastToImmutableSet(getOutputSet()); - if (table instanceof OlapTable && ((OlapTable) table).getKeysType().isAggregationFamily()) { - ImmutableSet.Builder 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 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 1afb2a06762632..c03e72c8f9e398 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 ff0df74589a9b1..439559aa5e0e92 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;" +}