[Fix](statistics) Fix analyze olap table couldn't get partition names bug (#24696)

Call getPartitionNames to get all partitions while analyzing for olap table. Couldn't return NULL, otherwise analyze for olap table will do nothing.
This commit is contained in:
Jibing-Li
2023-09-21 10:28:37 +08:00
committed by GitHub
parent ca73684d10
commit b87ea68720
2 changed files with 83 additions and 7 deletions

View File

@ -24,6 +24,7 @@ import org.apache.doris.catalog.Env;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.TableIf;
import org.apache.doris.catalog.View;
import org.apache.doris.catalog.external.ExternalTable;
import org.apache.doris.catalog.external.HMSExternalTable;
import org.apache.doris.common.AnalysisException;
import org.apache.doris.common.Config;
@ -41,6 +42,7 @@ import org.apache.doris.statistics.util.StatisticsUtil;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.Set;
@ -239,16 +241,15 @@ public class AnalyzeTblStmt extends AnalyzeStmt {
public Set<String> getPartitionNames() {
if (partitionNames == null || partitionNames.getPartitionNames() == null) {
return null;
if (table instanceof ExternalTable) {
// External table couldn't return all partitions when partitionNames is not set.
// Because Analyze Table command for external table could specify partition names.
return Collections.emptySet();
}
return table.getPartitionNames();
}
Set<String> partitions = Sets.newHashSet();
partitions.addAll(partitionNames.getPartitionNames());
/*
if (isSamplingPartition()) {
int partNum = ConnectContext.get().getSessionVariable().getExternalTableAnalyzePartNum();
partitions = partitions.stream().limit(partNum).collect(Collectors.toSet());
}
*/
return partitions;
}