[fix](plan) fix wrong result for random distributed agg table with all keys not null (#36271)
This commit is contained in:
@ -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
|
||||
|
||||
@ -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()) {
|
||||
|
||||
@ -215,3 +215,15 @@
|
||||
-- !sql_16 --
|
||||
2
|
||||
|
||||
-- !sql_17 --
|
||||
1
|
||||
|
||||
-- !sql_18 --
|
||||
1
|
||||
|
||||
-- !sql_19 --
|
||||
1
|
||||
|
||||
-- !sql_20 --
|
||||
1
|
||||
|
||||
|
||||
@ -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;"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user