[bug](delete) fix delete random distributed tbl (#37985)

## Proposed changes

Bug description:
In PR https://github.com/apache/doris/pull/33630, Doris supports auto
aggregation for random distributed table, but it not only effects query
statements, so if we delete from a random distributed table, will get an
error because of unexpectedly rewriting.
```
CREATE TABLE `test_tbl` (
  `k` INT NULL,
  `v` BIGINT SUM NULL
) ENGINE=OLAP
AGGREGATE KEY(`k`)
DISTRIBUTED BY RANDOM BUCKETS AUTO;

mysql > delete from test_tbl where k=1;
ERROR 1105 (HY000): errCode = 2, detailMessage = Where clause only supports compound predicate, binary predicate, is_null predicate or in predicate.
```

fix:
Check whether it is a query statement before rewriting.
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BuildAggForRandomDistributedTable.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BuildAggForRandomDistributedTable.java
index 86c89e4..e547a55 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BuildAggForRandomDistributedTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BuildAggForRandomDistributedTable.java
@@ -51,6 +51,7 @@
 import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
 import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
+import org.apache.doris.qe.ConnectContext;
 
 import com.google.common.collect.ImmutableList;
 
@@ -67,22 +68,29 @@
     public List<Rule> buildRules() {
         return ImmutableList.of(
                 // Project(Scan) -> project(agg(scan))
-                logicalProject(logicalOlapScan()).when(project -> isRandomDistributedTbl(project.child()))
+                logicalProject(logicalOlapScan())
+                        .when(this::isQuery)
+                        .when(project -> isRandomDistributedTbl(project.child()))
                         .then(project -> preAggForRandomDistribution(project, project.child()))
                         .toRule(RuleType.BUILD_AGG_FOR_RANDOM_DISTRIBUTED_TABLE_PROJECT_SCAN),
                 // agg(scan) -> agg(agg(scan)), agg(agg) may optimized by MergeAggregate
-                logicalAggregate(logicalOlapScan()).when(agg -> isRandomDistributedTbl(agg.child())).whenNot(agg -> {
-                    Set<AggregateFunction> functions = agg.getAggregateFunctions();
-                    List<Expression> groupByExprs = agg.getGroupByExpressions();
-                    // check if need generate an inner agg plan or not
-                    // should not rewrite twice if we had rewritten olapScan to aggregate(olapScan)
-                    return functions.stream().allMatch(this::aggTypeMatch) && groupByExprs.stream()
+                logicalAggregate(logicalOlapScan())
+                        .when(this::isQuery)
+                        .when(agg -> isRandomDistributedTbl(agg.child()))
+                        .whenNot(agg -> {
+                            Set<AggregateFunction> functions = agg.getAggregateFunctions();
+                            List<Expression> groupByExprs = agg.getGroupByExpressions();
+                            // check if need generate an inner agg plan or not
+                            // should not rewrite twice if we had rewritten olapScan to aggregate(olapScan)
+                            return functions.stream().allMatch(this::aggTypeMatch) && groupByExprs.stream()
                                     .allMatch(this::isKeyOrConstantExpr);
-                })
+                        })
                         .then(agg -> preAggForRandomDistribution(agg, agg.child()))
                         .toRule(RuleType.BUILD_AGG_FOR_RANDOM_DISTRIBUTED_TABLE_AGG_SCAN),
                 // filter(scan) -> filter(agg(scan))
-                logicalFilter(logicalOlapScan()).when(filter -> isRandomDistributedTbl(filter.child()))
+                logicalFilter(logicalOlapScan())
+                        .when(this::isQuery)
+                        .when(filter -> isRandomDistributedTbl(filter.child()))
                         .then(filter -> preAggForRandomDistribution(filter, filter.child()))
                         .toRule(RuleType.BUILD_AGG_FOR_RANDOM_DISTRIBUTED_TABLE_FILTER_SCAN));
 
@@ -101,6 +109,12 @@
         return keysType == KeysType.AGG_KEYS && distributionInfo.getType() == DistributionInfoType.RANDOM;
     }
 
+    private boolean isQuery(LogicalPlan plan) {
+        return ConnectContext.get() != null
+                && ConnectContext.get().getState() != null
+                && ConnectContext.get().getState().isQuery();
+    }
+
     /**
      * add LogicalAggregate above olapScan for preAgg
      *
diff --git a/regression-test/data/delete_p0/test_delete_from_random_distributed_tbl.out b/regression-test/data/delete_p0/test_delete_from_random_distributed_tbl.out
new file mode 100644
index 0000000..5d73997
--- /dev/null
+++ b/regression-test/data/delete_p0/test_delete_from_random_distributed_tbl.out
@@ -0,0 +1,8 @@
+-- This file is automatically generated. You should know what you did if you want to edit this
+-- !sql --
+1	10
+2	30
+
+-- !sql --
+2	30
+
diff --git a/regression-test/suites/delete_p0/test_delete_from_random_distributed_tbl.groovy b/regression-test/suites/delete_p0/test_delete_from_random_distributed_tbl.groovy
new file mode 100644
index 0000000..17f81df
--- /dev/null
+++ b/regression-test/suites/delete_p0/test_delete_from_random_distributed_tbl.groovy
@@ -0,0 +1,38 @@
+// 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.
+
+suite("test_delete_from_random_distributed_tbl") {
+    def tableName = "test_delete_from_random_distributed_tbl"
+
+    sql """ DROP TABLE IF EXISTS ${tableName}; """
+    sql """ CREATE TABLE ${tableName} (
+                `k` INT NULL, 
+                `v` BIGINT SUM NULL
+            ) ENGINE=OLAP 
+            AGGREGATE KEY(`k`) 
+            DISTRIBUTED BY RANDOM BUCKETS 4 
+            PROPERTIES ("replication_num"="1") 
+        """
+
+    sql """ insert into ${tableName} values(1, 10),(2,10),(2,20)"""
+    qt_sql """ select * from ${tableName} order by k """
+
+    sql """ delete from ${tableName} where k=1 """
+    qt_sql """ select * from ${tableName} order by k """
+
+    sql """ DROP TABLE IF EXISTS ${tableName}; """
+}