diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java index dae18a9a15eeb8..73c8817c20ab16 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/AnalysisManager.java @@ -594,9 +594,7 @@ protected List getPendingJobs(Map>> entry : jobMap.entrySet()) { TableNameInfo table = entry.getKey(); if (tableNameInfo == null - || tableNameInfo.getCtl() == null && tableNameInfo.getDb() == null - && tableNameInfo.getTbl() == null - || tableNameInfo.equals(table)) { + || matchesFilter(tableNameInfo, table)) { result.add(new AutoAnalysisPendingJob(table.getCtl(), table.getDb(), table.getTbl(), entry.getValue(), priority)); } @@ -605,6 +603,29 @@ protected List getPendingJobs(Map findAnalysisJobs(String state, String ctl, String db, String table, long jobId, boolean isAuto) { TableIf tbl = null; diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java index b0550fe78d64ad..40b1a7022c82c3 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsAutoCollector.java @@ -25,7 +25,9 @@ import org.apache.doris.common.DdlException; import org.apache.doris.common.Pair; import org.apache.doris.common.util.MasterDaemon; +import org.apache.doris.datasource.ExternalTable; import org.apache.doris.datasource.hive.HMSExternalTable; +import org.apache.doris.datasource.iceberg.IcebergExternalTable; import org.apache.doris.info.TableNameInfo; import org.apache.doris.persist.TableStatsDeletionLog; import org.apache.doris.statistics.AnalysisInfo.AnalysisMethod; @@ -148,6 +150,9 @@ protected void processOneJob(TableIf table, Set> columns, J if (StatisticsUtil.enablePartitionAnalyze() && table.isPartitionedTable()) { analysisMethod = AnalysisMethod.FULL; } + if (table instanceof ExternalTable) { // External table only support full analyze now + analysisMethod = AnalysisMethod.FULL; + } boolean isSampleAnalyze = analysisMethod.equals(AnalysisMethod.SAMPLE); OlapTable olapTable = table instanceof OlapTable ? (OlapTable) table : null; AnalysisManager manager = Env.getServingEnv().getAnalysisManager(); @@ -229,9 +234,9 @@ protected boolean supportAutoAnalyze(TableIf tableIf) { if (tableIf == null) { return false; } - return tableIf instanceof OlapTable + return tableIf instanceof OlapTable || tableIf instanceof IcebergExternalTable || tableIf instanceof HMSExternalTable - && ((HMSExternalTable) tableIf).getDlaType().equals(HMSExternalTable.DLAType.HIVE); + && ((HMSExternalTable) tableIf).getDlaType().equals(HMSExternalTable.DLAType.HIVE); } protected AnalysisInfo createAnalyzeJobForTbl(TableIf table, Set> jobColumns, diff --git a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java index 873ca0d2c99b51..9cf4d34f7669a5 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/statistics/util/StatisticsUtil.java @@ -55,6 +55,7 @@ import org.apache.doris.datasource.InternalCatalog; import org.apache.doris.datasource.hive.HMSExternalTable; import org.apache.doris.datasource.hive.HMSExternalTable.DLAType; +import org.apache.doris.datasource.iceberg.IcebergExternalTable; import org.apache.doris.info.TableNameInfo; import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral; import org.apache.doris.nereids.trees.expressions.literal.IPv4Literal; @@ -1130,15 +1131,17 @@ public static boolean needAnalyzeColumn(TableIf table, Pair colu // 3. Check partition return needAnalyzePartition(olapTable, tableStatsStatus, columnStatsMeta); } else { - // Now, we only support Hive external table auto analyze. - if (!(table instanceof HMSExternalTable)) { + if (!(table instanceof HMSExternalTable || (table instanceof IcebergExternalTable))) { return false; } - HMSExternalTable hmsTable = (HMSExternalTable) table; - if (!hmsTable.getDlaType().equals(DLAType.HIVE)) { - return false; + if (table instanceof HMSExternalTable) { + HMSExternalTable hmsTable = (HMSExternalTable) table; + if (!hmsTable.getDlaType().equals(DLAType.HIVE) && !hmsTable.getDlaType().equals(DLAType.ICEBERG)) { + return false; + } } - // External is hard to calculate change rate, use time interval to control analyze frequency. + // External is hard to calculate change rate, use time interval to control + // analyze frequency. return System.currentTimeMillis() - tableStatsStatus.lastAnalyzeTime > StatisticsUtil.getExternalTableAutoAnalyzeIntervalInMillis(); }