This is an automated email from the ASF dual-hosted git repository.

starocean999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 2ca19d15954 [Chore](nereids) remove AlterColumnStatsStmt (#51790)
2ca19d15954 is described below

commit 2ca19d159546b0367b339a81ac57f427b8acecb9
Author: yaoxiao <[email protected]>
AuthorDate: Wed Jun 18 09:41:06 2025 +0800

    [Chore](nereids) remove AlterColumnStatsStmt (#51790)
---
 fe/fe-core/src/main/cup/sql_parser.cup             |  10 -
 .../doris/analysis/AlterColumnStatsStmt.java       | 230 ---------------------
 .../main/java/org/apache/doris/qe/DdlExecutor.java |   4 -
 .../doris/statistics/StatisticsRepository.java     |  95 ---------
 4 files changed, 339 deletions(-)

diff --git a/fe/fe-core/src/main/cup/sql_parser.cup 
b/fe/fe-core/src/main/cup/sql_parser.cup
index f39a485d4a0..0bcc4af8f6b 100644
--- a/fe/fe-core/src/main/cup/sql_parser.cup
+++ b/fe/fe-core/src/main/cup/sql_parser.cup
@@ -1430,16 +1430,6 @@ alter_stmt ::=
     {:
         RESULT = new AlterTableStatsStmt(tbl, map);
     :}
-    | KW_ALTER KW_TABLE table_name:tbl KW_MODIFY KW_COLUMN ident:columnName
-      KW_SET KW_STATS LPAREN key_value_map:map RPAREN 
opt_partition_names:partitionNames
-    {:
-        RESULT = new AlterColumnStatsStmt(tbl, null, columnName, map, 
partitionNames);
-    :}
-    | KW_ALTER KW_TABLE table_name:tbl KW_INDEX ident:idx KW_MODIFY KW_COLUMN 
ident:columnName
-      KW_SET KW_STATS LPAREN key_value_map:map RPAREN 
opt_partition_names:partitionNames
-    {:
-        RESULT = new AlterColumnStatsStmt(tbl, idx, columnName, map, 
partitionNames);
-    :}
     | KW_ALTER KW_TABLE table_name:tbl KW_SET LPAREN key_value_map:properties 
RPAREN
     {:
         ModifyTablePropertiesClause clause = new 
ModifyTablePropertiesClause(properties);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterColumnStatsStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterColumnStatsStmt.java
deleted file mode 100644
index 3cb2f110181..00000000000
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/AlterColumnStatsStmt.java
+++ /dev/null
@@ -1,230 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-package org.apache.doris.analysis;
-
-import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.DatabaseIf;
-import org.apache.doris.catalog.Env;
-import org.apache.doris.catalog.OlapTable;
-import org.apache.doris.catalog.Partition;
-import org.apache.doris.catalog.PartitionType;
-import org.apache.doris.catalog.TableIf;
-import org.apache.doris.common.AnalysisException;
-import org.apache.doris.common.ErrorCode;
-import org.apache.doris.common.ErrorReport;
-import org.apache.doris.common.UserException;
-import org.apache.doris.common.util.PrintableMap;
-import org.apache.doris.datasource.CatalogIf;
-import org.apache.doris.mysql.privilege.PrivPredicate;
-import org.apache.doris.qe.ConnectContext;
-import org.apache.doris.statistics.ColumnStatistic;
-import org.apache.doris.statistics.StatsType;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-/**
- * Manually inject statistics for columns.
- * Only OLAP table statistics are supported.
- *
- * Syntax:
- *   ALTER TABLE table_name MODIFY COLUMN columnName
- *   SET STATS ('k1' = 'v1', ...);
- *
- * e.g.
- *   ALTER TABLE stats_test.example_tbl MODIFY COLUMN age
- *   SET STATS ('row_count'='6001215');
- *
- * Note: partition stats injection is mainly convenient for test cost 
estimation,
- * and can be removed after the related functions are completed.
- */
-public class AlterColumnStatsStmt extends DdlStmt implements 
NotFallbackInParser {
-
-    private static final ImmutableSet<StatsType> CONFIGURABLE_PROPERTIES_SET = 
new ImmutableSet.Builder<StatsType>()
-            .add(StatsType.ROW_COUNT)
-            .add(ColumnStatistic.NDV)
-            .add(ColumnStatistic.AVG_SIZE)
-            .add(ColumnStatistic.MAX_SIZE)
-            .add(ColumnStatistic.NUM_NULLS)
-            .add(ColumnStatistic.MIN_VALUE)
-            .add(ColumnStatistic.MAX_VALUE)
-            .add(StatsType.DATA_SIZE)
-            .build();
-
-    private final TableName tableName;
-    private final String indexName;
-    private final String columnName;
-    private final Map<String, String> properties;
-    private final PartitionNames optPartitionNames;
-
-    private final List<Long> partitionIds = Lists.newArrayList();
-    private final Map<StatsType, String> statsTypeToValue = Maps.newHashMap();
-
-    private long indexId = -1;
-
-    public AlterColumnStatsStmt(TableName tableName, String indexName, String 
columnName,
-            Map<String, String> properties, PartitionNames optPartitionNames) {
-        this.tableName = tableName;
-        this.indexName = indexName;
-        this.columnName = columnName;
-        this.properties = properties == null ? Collections.emptyMap() : 
properties;
-        this.optPartitionNames = optPartitionNames;
-    }
-
-    public TableName getTableName() {
-        return tableName;
-    }
-
-    public String getColumnName() {
-        return columnName;
-    }
-
-    public long getIndexId() {
-        return indexId;
-    }
-
-    public List<Long> getPartitionIds() {
-        return partitionIds;
-    }
-
-    public Map<StatsType, String> getStatsTypeToValue() {
-        return statsTypeToValue;
-    }
-
-    @Override
-    public void analyze(Analyzer analyzer) throws UserException {
-        if (!ConnectContext.get().getSessionVariable().enableStats) {
-            throw new UserException("Analyze function is forbidden, you should 
add `enable_stats=true`"
-                    + "in your FE conf file");
-        }
-        super.analyze(analyzer);
-
-        // check table name
-        tableName.analyze(analyzer);
-
-        // check partition & column
-        checkPartitionAndColumn();
-
-        // check properties
-        Optional<StatsType> optional = 
properties.keySet().stream().map(StatsType::fromString)
-                .filter(statsType -> 
!CONFIGURABLE_PROPERTIES_SET.contains(statsType))
-                .findFirst();
-        if (optional.isPresent()) {
-            throw new AnalysisException(optional.get() + " is invalid 
statistics");
-        }
-
-        if (!properties.containsKey(StatsType.ROW_COUNT.getValue())) {
-            throw new AnalysisException("Set column stats must set row_count. 
e.g. 'row_count'='5'");
-        }
-
-        // get statsTypeToValue
-        properties.forEach((key, value) -> {
-            StatsType statsType = StatsType.fromString(key);
-            statsTypeToValue.put(statsType, value);
-        });
-    }
-
-    @Override
-    public void checkPriv() throws AnalysisException {
-        if (!Env.getCurrentEnv().getAccessManager()
-                .checkTblPriv(ConnectContext.get(), tableName.getCtl(), 
tableName.getDb(),
-                        tableName.getTbl(), PrivPredicate.ALTER)) {
-            
ErrorReport.reportAnalysisException(ErrorCode.ERR_TABLEACCESS_DENIED_ERROR, 
"ALTER COLUMN STATS",
-                    ConnectContext.get().getQualifiedUser(), 
ConnectContext.get().getRemoteIP(),
-                    tableName.getDb() + ": " + tableName.getTbl());
-        }
-    }
-
-    private void checkPartitionAndColumn() throws AnalysisException {
-        CatalogIf catalog = 
analyzer.getEnv().getCatalogMgr().getCatalog(tableName.getCtl());
-        DatabaseIf db = catalog.getDbOrAnalysisException(tableName.getDb());
-        TableIf table = db.getTableOrAnalysisException(tableName.getTbl());
-
-        if (indexName != null) {
-            if (!(table instanceof OlapTable)) {
-                throw new AnalysisException("Only OlapTable support alter 
index stats. "
-                    + "Table " + table.getName() + " is not OlapTable.");
-            }
-            OlapTable olapTable = (OlapTable) table;
-            Long idxId = olapTable.getIndexIdByName(indexName);
-            if (idxId == null) {
-                throw new AnalysisException("Index " + indexName + " not exist 
in table " + table.getName());
-            }
-            indexId = idxId;
-        }
-        Column column = table.getColumn(columnName);
-        if (column == null || !column.getName().equals(columnName)) {
-            ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_FIELD_ERROR, 
columnName, table.getName());
-        }
-
-        if (optPartitionNames != null && table instanceof OlapTable) {
-            OlapTable olapTable = (OlapTable) table;
-            if 
(olapTable.getPartitionInfo().getType().equals(PartitionType.UNPARTITIONED)) {
-                throw new AnalysisException("Not a partitioned table: " + 
olapTable.getName());
-            }
-
-            optPartitionNames.analyze(analyzer);
-            List<String> partitionNames = 
optPartitionNames.getPartitionNames();
-            for (String partitionName : partitionNames) {
-                Partition partition = olapTable.getPartition(partitionName);
-                if (partition == null) {
-                    throw new AnalysisException("Partition does not exist: " + 
partitionName);
-                }
-                partitionIds.add(partition.getId());
-            }
-        }
-    }
-
-    @Override
-    public String toSql() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("ALTER TABLE ");
-        sb.append(tableName.toSql());
-        if (indexName != null) {
-            sb.append(" INDEX ");
-            sb.append(indexName);
-        }
-        sb.append(" MODIFY COLUMN ");
-        sb.append(columnName);
-        sb.append(" SET STATS ");
-        sb.append("(");
-        sb.append(new PrintableMap<>(properties,
-                " = ", true, false));
-        sb.append(")");
-        if (optPartitionNames != null) {
-            sb.append(" ");
-            sb.append(optPartitionNames.toSql());
-        }
-        return sb.toString();
-    }
-
-    public String getValue(StatsType statsType) {
-        return statsTypeToValue.get(statsType);
-    }
-
-    @Override
-    public StmtType stmtType() {
-        return StmtType.ALTER;
-    }
-}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java 
b/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
index 6092c244a53..2deb55bf1bd 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/DdlExecutor.java
@@ -33,7 +33,6 @@ import org.apache.doris.analysis.AlterCatalogCommentStmt;
 import org.apache.doris.analysis.AlterCatalogNameStmt;
 import org.apache.doris.analysis.AlterCatalogPropertyStmt;
 import org.apache.doris.analysis.AlterColocateGroupStmt;
-import org.apache.doris.analysis.AlterColumnStatsStmt;
 import org.apache.doris.analysis.AlterDatabasePropertyStmt;
 import org.apache.doris.analysis.AlterDatabaseQuotaStmt;
 import org.apache.doris.analysis.AlterDatabaseRename;
@@ -138,7 +137,6 @@ import org.apache.doris.load.loadv2.JobState;
 import org.apache.doris.load.loadv2.LoadJob;
 import org.apache.doris.mysql.privilege.Auth;
 import org.apache.doris.persist.CleanQueryStatsInfo;
-import org.apache.doris.statistics.StatisticsRepository;
 
 import com.google.common.collect.Lists;
 import org.apache.logging.log4j.LogManager;
@@ -180,8 +178,6 @@ public class DdlExecutor {
             env.createMaterializedView((CreateMaterializedViewStmt) ddlStmt);
         } else if (ddlStmt instanceof AlterTableStmt) {
             env.alterTable((AlterTableStmt) ddlStmt);
-        } else if (ddlStmt instanceof AlterColumnStatsStmt) {
-            StatisticsRepository.alterColumnStatistics((AlterColumnStatsStmt) 
ddlStmt);
         } else if (ddlStmt instanceof AlterViewStmt) {
             env.alterView((AlterViewStmt) ddlStmt);
         } else if (ddlStmt instanceof CancelAlterTableStmt) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
index 5ec13d72236..9539b415a26 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/statistics/StatisticsRepository.java
@@ -17,8 +17,6 @@
 
 package org.apache.doris.statistics;
 
-import org.apache.doris.analysis.AlterColumnStatsStmt;
-import org.apache.doris.analysis.TableName;
 import org.apache.doris.catalog.Column;
 import org.apache.doris.catalog.Env;
 import org.apache.doris.catalog.OlapTable;
@@ -407,99 +405,6 @@ public class StatisticsRepository {
         }
     }
 
-    public static void alterColumnStatistics(AlterColumnStatsStmt 
alterColumnStatsStmt) throws Exception {
-        TableName tableName = alterColumnStatsStmt.getTableName();
-        List<Long> partitionIds = alterColumnStatsStmt.getPartitionIds();
-        DBObjects objects = 
StatisticsUtil.convertTableNameToObjects(tableName);
-        String rowCount = alterColumnStatsStmt.getValue(StatsType.ROW_COUNT);
-        String ndv = alterColumnStatsStmt.getValue(StatsType.NDV);
-        String nullCount = alterColumnStatsStmt.getValue(StatsType.NUM_NULLS);
-        String min = alterColumnStatsStmt.getValue(StatsType.MIN_VALUE);
-        String max = alterColumnStatsStmt.getValue(StatsType.MAX_VALUE);
-        String dataSize = alterColumnStatsStmt.getValue(StatsType.DATA_SIZE);
-        long indexId = alterColumnStatsStmt.getIndexId();
-        if (rowCount == null) {
-            throw new RuntimeException("Row count is null.");
-        }
-        ColumnStatisticBuilder builder = new 
ColumnStatisticBuilder(Double.parseDouble(rowCount));
-        String colName = alterColumnStatsStmt.getColumnName();
-        Column column = objects.table.getColumn(colName);
-        if (ndv != null) {
-            double dNdv = Double.parseDouble(ndv);
-            builder.setNdv(dNdv);
-            builder.setOriginal(null);
-        }
-        if (nullCount != null) {
-            builder.setNumNulls(Double.parseDouble(nullCount));
-        }
-        if (min != null) {
-            builder.setMinExpr(StatisticsUtil.readableValue(column.getType(), 
min));
-            
builder.setMinValue(StatisticsUtil.convertToDouble(column.getType(), min));
-        }
-        if (max != null) {
-            builder.setMaxExpr(StatisticsUtil.readableValue(column.getType(), 
max));
-            
builder.setMaxValue(StatisticsUtil.convertToDouble(column.getType(), max));
-        }
-        if (dataSize != null) {
-            double size = Double.parseDouble(dataSize);
-            double rows = Double.parseDouble(rowCount);
-            if (size > 0) {
-                builder.setDataSize(size);
-                if (rows > 0) {
-                    builder.setAvgSizeByte(size / rows);
-                }
-            }
-        }
-
-        ColumnStatistic columnStatistic = builder.build();
-        Map<String, String> params = new HashMap<>();
-        params.put("id", constructId(objects.table.getId(), indexId, colName));
-        params.put("catalogId", String.valueOf(objects.catalog.getId()));
-        params.put("dbId", String.valueOf(objects.db.getId()));
-        params.put("idxId", String.valueOf(indexId));
-        params.put("tblId", String.valueOf(objects.table.getId()));
-        params.put("colId", String.valueOf(colName));
-        params.put("count", String.valueOf(columnStatistic.count));
-        params.put("ndv", String.valueOf(columnStatistic.ndv));
-        params.put("nullCount", String.valueOf(columnStatistic.numNulls));
-        params.put("min", min == null ? "NULL" : "'" + 
StatisticsUtil.escapeSQL(min) + "'");
-        params.put("max", max == null ? "NULL" : "'" + 
StatisticsUtil.escapeSQL(max) + "'");
-        params.put("dataSize", String.valueOf(columnStatistic.dataSize));
-
-        if (partitionIds.isEmpty()) {
-            // update table granularity statistics
-            params.put("partId", "NULL");
-            StatisticsUtil.execUpdate(INSERT_INTO_COLUMN_STATISTICS_FOR_ALTER, 
params);
-            ColStatsData data = new 
ColStatsData(constructId(objects.table.getId(), indexId, colName),
-                    objects.catalog.getId(), objects.db.getId(), 
objects.table.getId(), indexId, colName,
-                    null, columnStatistic);
-            Env.getCurrentEnv().getStatisticsCache().syncColStats(data);
-            AnalysisInfo mockedJobInfo = new AnalysisInfoBuilder()
-                    .setTblUpdateTime(objects.table.getUpdateTime())
-                    .setColName("")
-                    .setRowCount((long) Double.parseDouble(rowCount))
-                    .setJobColumns(Sets.newHashSet())
-                    .setUserInject(true)
-                    .setJobType(AnalysisInfo.JobType.MANUAL)
-                    .build();
-            if (objects.table instanceof OlapTable) {
-                indexId = indexId == -1 ? ((OlapTable) 
objects.table).getBaseIndexId() : indexId;
-                mockedJobInfo.addIndexRowCount(indexId, (long) 
Double.parseDouble(rowCount));
-            }
-            
Env.getCurrentEnv().getAnalysisManager().updateTableStatsForAlterStats(mockedJobInfo,
 objects.table);
-        } else {
-            // update partition granularity statistics
-            for (Long partitionId : partitionIds) {
-                HashMap<String, String> partParams = Maps.newHashMap(params);
-                partParams.put("partId", String.valueOf(partitionId));
-                
StatisticsUtil.execUpdate(INSERT_INTO_COLUMN_STATISTICS_FOR_ALTER, partParams);
-                // TODO cache partition granular statistics
-                // Env.getCurrentEnv().getStatisticsCache()
-                //         .updateColStatsCache(partitionId, -1, colName, 
builder.build());
-            }
-        }
-    }
-
     public static List<ResultRow> fetchRecentStatsUpdatedCol() {
         return 
StatisticsUtil.execStatisticQuery(FETCH_RECENT_STATS_UPDATED_COL);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to