[fix](plan) fix wrong result for random distributed agg table with all keys not null (#36271)

This commit is contained in:
camby
2024-06-18 11:25:31 +08:00
committed by GitHub
parent 4a117800ca
commit e2350403a6
4 changed files with 57 additions and 11 deletions

View File

@ -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

View File

@ -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()) {

View File

@ -215,3 +215,15 @@
-- !sql_16 --
2
-- !sql_17 --
1
-- !sql_18 --
1
-- !sql_19 --
1
-- !sql_20 --
1

View File

@ -131,4 +131,31 @@ suite("select_random_distributed_tbl") {
}
sql "drop table ${tableName};"
}
// 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;"
}