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

morrysnow 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 7bad2e1d9fa [opt](nereids) infer result column name in ctas and query 
stmt (#26055)
7bad2e1d9fa is described below

commit 7bad2e1d9fa3f8cab1584a7248fcc4c466b37714
Author: seawinde <[email protected]>
AuthorDate: Wed Nov 8 11:28:48 2023 +0800

    [opt](nereids) infer result column name in ctas and query stmt (#26055)
    
    Infer name if it is an expression and doesn't alias artificially when 
create or select stmt in nereids.
    The infer name strategy is the same as #24990
---
 .../java/org/apache/doris/analysis/SelectStmt.java |   8 +-
 .../doris/nereids/analyzer/UnboundFunction.java    |   2 +-
 .../nereids/rules/analysis/BindExpression.java     |  17 +-
 .../trees/expressions/AggregateExpression.java     |   2 +-
 .../doris/nereids/trees/expressions/Alias.java     |   4 +
 .../trees/expressions/AssertNumRowsElement.java    |   2 +-
 .../nereids/trees/expressions/Expression.java      |   2 +-
 .../nereids/trees/expressions/NamedExpression.java |   2 +-
 .../nereids/trees/expressions/SubqueryExpr.java    |   2 +-
 .../trees/expressions/functions/BoundFunction.java |   2 +-
 .../nereids/trees/expressions/literal/Literal.java |   2 +-
 .../trees/plans/visitor/InferPlanOutputAlias.java  |  76 ++
 .../org/apache/doris/qe/OlapQueryCacheTest.java    |  22 +-
 .../suites/nereids_p0/infer_expr_name/load.groovy  | 821 +++++++++++++++++++++
 .../nereids_p0/infer_expr_name/query13.groovy      |  81 ++
 .../nereids_p0/infer_expr_name/query14.groovy      | 137 ++++
 .../nereids_p0/infer_expr_name/query15.groovy      |  49 ++
 .../nereids_p0/infer_expr_name/query2.groovy       |  94 +++
 .../nereids_p0/infer_expr_name/query23.groovy      |  80 ++
 .../nereids_p0/infer_expr_name/query35.groovy      | 102 +++
 .../nereids_p0/infer_expr_name/query38.groovy      |  51 ++
 .../nereids_p0/infer_expr_name/query41.groovy      |  80 ++
 .../nereids_p0/infer_expr_name/query42.groovy      |  53 ++
 .../nereids_p0/infer_expr_name/query45.groovy      |  50 ++
 .../nereids_p0/infer_expr_name/query59.groovy      |  81 ++
 .../nereids_p0/infer_expr_name/query61.groovy      |  74 ++
 .../nereids_p0/infer_expr_name/query62.groovy      |  63 ++
 .../nereids_p0/infer_expr_name/query8.groovy       | 136 ++++
 .../nereids_p0/infer_expr_name/query85.groovy      | 115 +++
 29 files changed, 2181 insertions(+), 29 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
index 48fd213e4c7..a9811cf4e02 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SelectStmt.java
@@ -554,12 +554,8 @@ public class SelectStmt extends QueryStmt {
                     }
                     
resultExprs.add(rewriteQueryExprByMvColumnExpr(item.getExpr(), analyzer));
                     String columnLabel = null;
-                    Class<? extends StatementBase> statementClazz = 
analyzer.getRootStatementClazz();
-                    if (statementClazz != null
-                            && 
(!QueryStmt.class.isAssignableFrom(statementClazz) || hasOutFileClause())) {
-                        // Infer column name when item is expr
-                        columnLabel = item.toColumnLabel(i);
-                    }
+                    // Infer column name when item is expr, both query and ddl
+                    columnLabel = item.toColumnLabel(i);
                     if (columnLabel == null) {
                         // column label without position is applicative for 
query and do not infer
                         // column name when item is expr
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
index c5cb960dbe5..d73474906a9 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
@@ -62,7 +62,7 @@ public class UnboundFunction extends Function implements 
Unbound, PropagateNulla
     }
 
     @Override
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return Utils.normalizeName(getName(), DEFAULT_EXPRESSION_NAME);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
index b2b4c30b934..0d36ca31c32 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindExpression.java
@@ -37,6 +37,7 @@ import org.apache.doris.nereids.trees.UnaryNode;
 import org.apache.doris.nereids.trees.expressions.Alias;
 import org.apache.doris.nereids.trees.expressions.BoundStar;
 import org.apache.doris.nereids.trees.expressions.EqualTo;
+import org.apache.doris.nereids.trees.expressions.ExprId;
 import org.apache.doris.nereids.trees.expressions.Expression;
 import org.apache.doris.nereids.trees.expressions.NamedExpression;
 import org.apache.doris.nereids.trees.expressions.Properties;
@@ -72,12 +73,14 @@ import 
org.apache.doris.nereids.trees.plans.logical.LogicalSort;
 import org.apache.doris.nereids.trees.plans.logical.LogicalSubQueryAlias;
 import org.apache.doris.nereids.trees.plans.logical.LogicalTVFRelation;
 import org.apache.doris.nereids.trees.plans.logical.UsingJoin;
+import org.apache.doris.nereids.trees.plans.visitor.InferPlanOutputAlias;
 import org.apache.doris.nereids.util.TypeCoercionUtils;
 import org.apache.doris.qe.ConnectContext;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableList.Builder;
+import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.apache.commons.lang3.StringUtils;
@@ -564,10 +567,16 @@ public class BindExpression implements 
AnalysisRuleFactory {
             ),
             RuleType.BINDING_RESULT_SINK.build(
                 unboundResultSink().then(sink -> {
-                    List<NamedExpression> outputExprs = 
sink.child().getOutput().stream()
-                            .map(NamedExpression.class::cast)
-                            .collect(ImmutableList.toImmutableList());
-                    return new LogicalResultSink<>(outputExprs, sink.child());
+
+                    final ImmutableListMultimap.Builder<ExprId, Integer> 
exprIdToIndexMapBuilder =
+                            ImmutableListMultimap.builder();
+                    List<Slot> childOutput = sink.child().getOutput();
+                    for (int index = 0; index < childOutput.size(); index++) {
+                        
exprIdToIndexMapBuilder.put(childOutput.get(index).getExprId(), index);
+                    }
+                    InferPlanOutputAlias aliasInfer = new 
InferPlanOutputAlias(childOutput);
+                    sink.child().accept(aliasInfer, 
exprIdToIndexMapBuilder.build());
+                    return new LogicalResultSink<>(aliasInfer.getOutputs(), 
sink.child());
                 })
             )
         ).stream().map(ruleCondition).collect(ImmutableList.toImmutableList());
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
index 4eb4653ded1..d097efd7aed 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
@@ -119,7 +119,7 @@ public class AggregateExpression extends Expression 
implements UnaryExpression {
     }
 
     @Override
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return Utils.normalizeName(function.getName(), 
DEFAULT_EXPRESSION_NAME);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
index b02c968baba..877f792e501 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Alias.java
@@ -146,4 +146,8 @@ public class Alias extends NamedExpression implements 
UnaryExpression {
     public <R, C> R accept(ExpressionVisitor<R, C> visitor, C context) {
         return visitor.visitAlias(this, context);
     }
+
+    public boolean isNameFromChild() {
+        return nameFromChild;
+    }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
index 8744266c86b..9b2261e73bc 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
@@ -88,7 +88,7 @@ public class AssertNumRowsElement extends Expression 
implements LeafExpression,
     }
 
     @Override
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return assertion.name().toLowerCase();
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
index 12a3a9768ca..2a432aaa80b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
@@ -96,7 +96,7 @@ public abstract class Expression extends 
AbstractTreeNode<Expression> implements
 
     // Name of expr, this is used by generating column name automatically when 
there is no
     // alias
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return this.exprName;
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
index 6c2e14191c0..2854704b922 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
@@ -58,7 +58,7 @@ public abstract class NamedExpression extends Expression {
     }
 
     @Override
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return Utils.normalizeName(getName(), DEFAULT_EXPRESSION_NAME);
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
index 6715bed6cc9..d6876873ed3 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
@@ -85,7 +85,7 @@ public abstract class SubqueryExpr extends Expression 
implements LeafExpression
     }
 
     @Override
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return "subquery";
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
index d5008748482..e3970161c75 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
@@ -56,7 +56,7 @@ public abstract class BoundFunction extends Function 
implements ComputeSignature
     }
 
     @Override
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return Utils.normalizeName(getName(), DEFAULT_EXPRESSION_NAME);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
index e716d66994c..c83061f1959 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
@@ -132,7 +132,7 @@ public abstract class Literal extends Expression implements 
LeafExpression, Comp
     }
 
     @Override
-    protected String getExpressionName() {
+    public String getExpressionName() {
         return "literal";
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/InferPlanOutputAlias.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/InferPlanOutputAlias.java
new file mode 100644
index 00000000000..48248e1c588
--- /dev/null
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/visitor/InferPlanOutputAlias.java
@@ -0,0 +1,76 @@
+// 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.nereids.trees.plans.visitor;
+
+import org.apache.doris.nereids.trees.expressions.Alias;
+import org.apache.doris.nereids.trees.expressions.ExprId;
+import org.apache.doris.nereids.trees.expressions.NamedExpression;
+import org.apache.doris.nereids.trees.expressions.Slot;
+import org.apache.doris.nereids.trees.plans.Plan;
+
+import com.google.common.collect.ImmutableCollection;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * Infer output column name when it refers an expression and not has an alias 
manually.
+ */
+public class InferPlanOutputAlias extends DefaultPlanVisitor<Void, 
ImmutableMultimap<ExprId, Integer>> {
+
+    private final List<Slot> currentOutputs;
+    private final List<NamedExpression> finalOutputs;
+
+    public InferPlanOutputAlias(List<Slot> currentOutputs) {
+        this.currentOutputs = currentOutputs;
+        this.finalOutputs = new ArrayList<>(currentOutputs);
+    }
+
+    @Override
+    public Void visit(Plan plan, ImmutableMultimap<ExprId, Integer> 
currentExprIdAndIndexMap) {
+
+        List<Alias> aliasProjects = plan.getExpressions().stream()
+                .filter(expression -> expression instanceof Alias)
+                .map(Alias.class::cast)
+                .collect(Collectors.toList());
+
+        ImmutableSet<ExprId> currentOutputExprIdSet = 
currentExprIdAndIndexMap.keySet();
+        for (Alias projectItem : aliasProjects) {
+            ExprId exprId = projectItem.getExprId();
+            // Infer name when alias child is expression and alias's name is 
from child
+            if (currentOutputExprIdSet.contains(projectItem.getExprId())
+                    && projectItem.isNameFromChild()) {
+                String inferredAliasName = 
projectItem.child().getExpressionName();
+                ImmutableCollection<Integer> outPutExprIndexes = 
currentExprIdAndIndexMap.get(exprId);
+                // replace output name by inferred name
+                outPutExprIndexes.forEach(index -> {
+                    Slot slot = currentOutputs.get(index);
+                    finalOutputs.set(index, slot.withName("__" + 
inferredAliasName + "_" + index));
+                });
+            }
+        }
+        return super.visit(plan, currentExprIdAndIndexMap);
+    }
+
+    public List<NamedExpression> getOutputs() {
+        return finalOutputs;
+    }
+}
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
index 5e2d13003f2..29201d08711 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
@@ -1044,10 +1044,10 @@ public class OlapQueryCacheTest {
             cache.rewriteSelectStmt(null);
             LOG.warn("Sub nokey={}", cache.getNokeyStmt().toSql());
             Assert.assertEquals(cache.getNokeyStmt().toSql(),
-                    "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `sum(``pv``)` FROM ("
-                            + "SELECT <slot 3> `eventdate` AS `eventdate`, 
<slot 4> count(`userid`) AS `pv` FROM "
-                            + "`testCluster:testDb`.`appevent` WHERE `eventid` 
= 1"
-                            + " GROUP BY `eventdate`) tbl GROUP BY 
`eventdate`");
+                    "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `__sum_1` "
+                            + "FROM (SELECT <slot 3> `eventdate` AS 
`eventdate`, <slot 4> count(`userid`) AS `pv` "
+                            + "FROM `testCluster:testDb`.`appevent` WHERE 
`eventid` = 1 "
+                            + "GROUP BY `eventdate`) tbl GROUP BY 
`eventdate`");
 
             PartitionRange range = cache.getPartitionRange();
             boolean flag = range.analytics();
@@ -1066,11 +1066,11 @@ public class OlapQueryCacheTest {
             sql = ca.getRewriteStmt().toSql();
             LOG.warn("Sub rewrite={}", sql);
             Assert.assertEquals(sql,
-                    "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `sum(``pv``)` FROM ("
-                            + "SELECT <slot 3> `eventdate` AS `eventdate`, 
<slot 4> count(`userid`) AS `pv` FROM "
-                            + "`testCluster:testDb`.`appevent` WHERE "
-                            + "`eventdate` > '2020-01-13' AND `eventdate` < 
'2020-01-16' AND `eventid` = 1 GROUP BY "
-                            + "`eventdate`) tbl GROUP BY `eventdate`");
+                    "SELECT <slot 7> `eventdate` AS `eventdate`, <slot 8> 
sum(`pv`) AS `__sum_1` "
+                            + "FROM (SELECT <slot 3> `eventdate` AS 
`eventdate`, <slot 4> count(`userid`) AS `pv` "
+                            + "FROM `testCluster:testDb`.`appevent` WHERE 
`eventdate` > '2020-01-13' "
+                            + "AND `eventdate` < '2020-01-16' AND `eventid` = 
1 "
+                            + "GROUP BY `eventdate`) tbl GROUP BY 
`eventdate`");
         } catch (Exception e) {
             LOG.warn("sub ex={}", e);
             Assert.fail(e.getMessage());
@@ -1122,8 +1122,8 @@ public class OlapQueryCacheTest {
 
         SqlCache sqlCache = (SqlCache) ca.getCache();
         String cacheKey = sqlCache.getSqlWithViewStmt();
-        Assert.assertEquals(cacheKey, "SELECT <slot 2> `eventdate` AS 
`eventdate`, <slot 3> count(`userid`) AS "
-                + "`count(``userid``)` FROM `testCluster:testDb`.`appevent` 
WHERE `eventdate` >= '2020-01-12' AND "
+        Assert.assertEquals(cacheKey, "SELECT <slot 2> `eventdate` AS 
`eventdate`, <slot 3> count(`userid`) "
+                + "AS `__count_1` FROM `testCluster:testDb`.`appevent` WHERE 
`eventdate` >= '2020-01-12' AND "
                 + "`eventdate` <= '2020-01-14' GROUP BY `eventdate`|");
         Assert.assertEquals(selectedPartitionIds.size(), 
sqlCache.getSumOfPartitionNum());
     }
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/load.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/load.groovy
new file mode 100644
index 00000000000..ecc84655e05
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/load.groovy
@@ -0,0 +1,821 @@
+package infer_expr_name
+// 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("load") {
+    String database = context.config.getDbNameByFile(context.file)
+    sql "drop database if exists ${database}"
+    sql "create database ${database}"
+    sql "use ${database}"
+
+    sql '''
+    drop table if exists customer_demographics
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS customer_demographics (
+        cd_demo_sk bigint not null,
+        cd_gender char(1),
+        cd_marital_status char(1),
+        cd_education_status char(20),
+        cd_purchase_estimate integer,
+        cd_credit_rating char(10),
+        cd_dep_count integer,
+        cd_dep_employed_count integer,
+        cd_dep_college_count integer
+    )
+    DUPLICATE KEY(cd_demo_sk)
+    DISTRIBUTED BY HASH(cd_gender) BUCKETS 12
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists reason
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS reason (
+        r_reason_sk bigint not null,
+        r_reason_id char(16) not null,
+        r_reason_desc char(100)
+    )
+    DUPLICATE KEY(r_reason_sk)
+    DISTRIBUTED BY HASH(r_reason_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists date_dim
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS date_dim (
+        d_date_sk bigint not null,
+        d_date_id char(16) not null,
+        d_date datev2,
+        d_month_seq integer,
+        d_week_seq integer,
+        d_quarter_seq integer,
+        d_year integer,
+        d_dow integer,
+        d_moy integer,
+        d_dom integer,
+        d_qoy integer,
+        d_fy_year integer,
+        d_fy_quarter_seq integer,
+        d_fy_week_seq integer,
+        d_day_name char(9),
+        d_quarter_name char(6),
+        d_holiday char(1),
+        d_weekend char(1),
+        d_following_holiday char(1),
+        d_first_dom integer,
+        d_last_dom integer,
+        d_same_day_ly integer,
+        d_same_day_lq integer,
+        d_current_day char(1),
+        d_current_week char(1),
+        d_current_month char(1),
+        d_current_quarter char(1),
+        d_current_year char(1)
+    )
+    DUPLICATE KEY(d_date_sk)
+    PARTITION BY RANGE(d_date_sk)
+    (
+    PARTITION `ppast` values less than("2450815"),
+    PARTITION `p1998` values less than("2451180"),
+    PARTITION `p1999` values less than("2451545"),
+    PARTITION `p2000` values less than("2451911"),
+    PARTITION `p2001` values less than("2452276"),
+    PARTITION `p2002` values less than("2452641"),
+    PARTITION `p2003` values less than("2453006"),
+    PARTITION `pfuture` values less than("9999999")
+    )
+    DISTRIBUTED BY HASH(d_date_sk) BUCKETS 12
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists warehouse
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS warehouse (
+        w_warehouse_sk bigint not null,
+        w_warehouse_id char(16) not null,
+        w_warehouse_name varchar(20),
+        w_warehouse_sq_ft integer,
+        w_street_number char(10),
+        w_street_name varchar(60),
+        w_street_type char(15),
+        w_suite_number char(10),
+        w_city varchar(60),
+        w_county varchar(30),
+        w_state char(2),
+        w_zip char(10),
+        w_country varchar(20),
+        w_gmt_offset decimalv3(5,2)
+    )
+    DUPLICATE KEY(w_warehouse_sk)
+    DISTRIBUTED BY HASH(w_warehouse_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists catalog_sales
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS catalog_sales (
+        cs_sold_date_sk bigint,
+        cs_item_sk bigint not null,
+        cs_order_number bigint not null,
+        cs_sold_time_sk bigint,
+        cs_ship_date_sk bigint,
+        cs_bill_customer_sk bigint,
+        cs_bill_cdemo_sk bigint,
+        cs_bill_hdemo_sk bigint,
+        cs_bill_addr_sk bigint,
+        cs_ship_customer_sk bigint,
+        cs_ship_cdemo_sk bigint,
+        cs_ship_hdemo_sk bigint,
+        cs_ship_addr_sk bigint,
+        cs_call_center_sk bigint,
+        cs_catalog_page_sk bigint,
+        cs_ship_mode_sk bigint,
+        cs_warehouse_sk bigint,
+        cs_promo_sk bigint,
+        cs_quantity integer,
+        cs_wholesale_cost decimalv3(7,2),
+        cs_list_price decimalv3(7,2),
+        cs_sales_price decimalv3(7,2),
+        cs_ext_discount_amt decimalv3(7,2),
+        cs_ext_sales_price decimalv3(7,2),
+        cs_ext_wholesale_cost decimalv3(7,2),
+        cs_ext_list_price decimalv3(7,2),
+        cs_ext_tax decimalv3(7,2),
+        cs_coupon_amt decimalv3(7,2),
+        cs_ext_ship_cost decimalv3(7,2),
+        cs_net_paid decimalv3(7,2),
+        cs_net_paid_inc_tax decimalv3(7,2),
+        cs_net_paid_inc_ship decimalv3(7,2),
+        cs_net_paid_inc_ship_tax decimalv3(7,2),
+        cs_net_profit decimalv3(7,2)
+    )
+    DUPLICATE KEY(cs_sold_date_sk, cs_item_sk)
+    DISTRIBUTED BY HASH(cs_item_sk, cs_order_number) BUCKETS 32
+    PROPERTIES (
+    "replication_num" = "1",
+    "colocate_with" = "catalog"
+    )
+    '''
+
+    sql '''
+    drop table if exists call_center
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS call_center (
+    cc_call_center_sk bigint not null,
+    cc_call_center_id char(16) not null,
+    cc_rec_start_date datev2,
+    cc_rec_end_date datev2,
+    cc_closed_date_sk integer,
+    cc_open_date_sk integer,
+    cc_name varchar(50),
+    cc_class varchar(50),
+    cc_employees integer,
+    cc_sq_ft integer,
+    cc_hours char(20),
+    cc_manager varchar(40),
+    cc_mkt_id integer,
+    cc_mkt_class char(50),
+    cc_mkt_desc varchar(100),
+    cc_market_manager varchar(40),
+    cc_division integer,
+    cc_division_name varchar(50),
+    cc_company integer,
+    cc_company_name char(50),
+    cc_street_number char(10),
+    cc_street_name varchar(60),
+    cc_street_type char(15),
+    cc_suite_number char(10),
+    cc_city varchar(60),
+    cc_county varchar(30),
+    cc_state char(2),
+    cc_zip char(10),
+    cc_country varchar(20),
+    cc_gmt_offset decimalv3(5,2),
+    cc_tax_percentage decimalv3(5,2)
+    )
+    DUPLICATE KEY(cc_call_center_sk)
+    DISTRIBUTED BY HASH(cc_call_center_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists inventory
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS inventory (
+        inv_date_sk bigint not null,
+        inv_item_sk bigint not null,
+        inv_warehouse_sk bigint,
+        inv_quantity_on_hand integer
+    )
+    DUPLICATE KEY(inv_date_sk, inv_item_sk, inv_warehouse_sk)
+    DISTRIBUTED BY HASH(inv_date_sk, inv_item_sk, inv_warehouse_sk) BUCKETS 32
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists catalog_returns
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS catalog_returns (
+    cr_item_sk bigint not null,
+    cr_order_number bigint not null,
+    cr_returned_date_sk bigint,
+    cr_returned_time_sk bigint,
+    cr_refunded_customer_sk bigint,
+    cr_refunded_cdemo_sk bigint,
+    cr_refunded_hdemo_sk bigint,
+    cr_refunded_addr_sk bigint,
+    cr_returning_customer_sk bigint,
+    cr_returning_cdemo_sk bigint,
+    cr_returning_hdemo_sk bigint,
+    cr_returning_addr_sk bigint,
+    cr_call_center_sk bigint,
+    cr_catalog_page_sk bigint,
+    cr_ship_mode_sk bigint,
+    cr_warehouse_sk bigint,
+    cr_reason_sk bigint,
+    cr_return_quantity integer,
+    cr_return_amount decimalv3(7,2),
+    cr_return_tax decimalv3(7,2),
+    cr_return_amt_inc_tax decimalv3(7,2),
+    cr_fee decimalv3(7,2),
+    cr_return_ship_cost decimalv3(7,2),
+    cr_refunded_cash decimalv3(7,2),
+    cr_reversed_charge decimalv3(7,2),
+    cr_store_credit decimalv3(7,2),
+    cr_net_loss decimalv3(7,2)
+    )
+    DUPLICATE KEY(cr_item_sk, cr_order_number)
+    DISTRIBUTED BY HASH(cr_item_sk, cr_order_number) BUCKETS 32
+    PROPERTIES (
+    "replication_num" = "1",
+    "colocate_with" = "catalog"
+    )
+    '''
+
+    sql '''
+    drop table if exists household_demographics
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS household_demographics (
+        hd_demo_sk bigint not null,
+        hd_income_band_sk bigint,
+        hd_buy_potential char(15),
+        hd_dep_count integer,
+        hd_vehicle_count integer
+    )
+    DUPLICATE KEY(hd_demo_sk)
+    DISTRIBUTED BY HASH(hd_demo_sk) BUCKETS 3
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists customer_address
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS customer_address (
+        ca_address_sk bigint not null,
+        ca_address_id char(16) not null,
+        ca_street_number char(10),
+        ca_street_name varchar(60),
+        ca_street_type char(15),
+        ca_suite_number char(10),
+        ca_city varchar(60),
+        ca_county varchar(30),
+        ca_state char(2),
+        ca_zip char(10),
+        ca_country varchar(20),
+        ca_gmt_offset decimalv3(5,2),
+        ca_location_type char(20)
+    )
+    DUPLICATE KEY(ca_address_sk)
+    DISTRIBUTED BY HASH(ca_address_sk) BUCKETS 12
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists income_band
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS income_band (
+        ib_income_band_sk bigint not null,
+        ib_lower_bound integer,
+        ib_upper_bound integer
+    )
+    DUPLICATE KEY(ib_income_band_sk)
+    DISTRIBUTED BY HASH(ib_income_band_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists catalog_page
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS catalog_page (
+    cp_catalog_page_sk bigint not null,
+    cp_catalog_page_id char(16) not null,
+    cp_start_date_sk integer,
+    cp_end_date_sk integer,
+    cp_department varchar(50),
+    cp_catalog_number integer,
+    cp_catalog_page_number integer,
+    cp_description varchar(100),
+    cp_type varchar(100)
+    )
+    DUPLICATE KEY(cp_catalog_page_sk)
+    DISTRIBUTED BY HASH(cp_catalog_page_sk) BUCKETS 3
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists item
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS item (
+        i_item_sk bigint not null,
+        i_item_id char(16) not null,
+        i_rec_start_date datev2,
+        i_rec_end_date datev2,
+        i_item_desc varchar(200),
+        i_current_price decimalv3(7,2),
+        i_wholesale_cost decimalv3(7,2),
+        i_brand_id integer,
+        i_brand char(50),
+        i_class_id integer,
+        i_class char(50),
+        i_category_id integer,
+        i_category char(50),
+        i_manufact_id integer,
+        i_manufact char(50),
+        i_size char(20),
+        i_formulation char(20),
+        i_color char(20),
+        i_units char(10),
+        i_container char(10),
+        i_manager_id integer,
+        i_product_name char(50)
+    )
+    DUPLICATE KEY(i_item_sk)
+    DISTRIBUTED BY HASH(i_item_sk) BUCKETS 12
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists web_returns
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS web_returns (
+        wr_item_sk bigint not null,
+        wr_order_number bigint not null,
+        wr_returned_date_sk bigint,
+        wr_returned_time_sk bigint,
+        wr_refunded_customer_sk bigint,
+        wr_refunded_cdemo_sk bigint,
+        wr_refunded_hdemo_sk bigint,
+        wr_refunded_addr_sk bigint,
+        wr_returning_customer_sk bigint,
+        wr_returning_cdemo_sk bigint,
+        wr_returning_hdemo_sk bigint,
+        wr_returning_addr_sk bigint,
+        wr_web_page_sk bigint,
+        wr_reason_sk bigint,
+        wr_return_quantity integer,
+        wr_return_amt decimalv3(7,2),
+        wr_return_tax decimalv3(7,2),
+        wr_return_amt_inc_tax decimalv3(7,2),
+        wr_fee decimalv3(7,2),
+        wr_return_ship_cost decimalv3(7,2),
+        wr_refunded_cash decimalv3(7,2),
+        wr_reversed_charge decimalv3(7,2),
+        wr_account_credit decimalv3(7,2),
+        wr_net_loss decimalv3(7,2)
+    )
+    DUPLICATE KEY(wr_item_sk, wr_order_number)
+    DISTRIBUTED BY HASH(wr_item_sk, wr_order_number) BUCKETS 32
+    PROPERTIES (
+    "replication_num" = "1",
+    "colocate_with" = "web"
+    )
+    '''
+
+    sql '''
+    drop table if exists web_site
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS web_site (
+        web_site_sk bigint not null,
+        web_site_id char(16) not null,
+        web_rec_start_date datev2,
+        web_rec_end_date datev2,
+        web_name varchar(50),
+        web_open_date_sk bigint,
+        web_close_date_sk bigint,
+        web_class varchar(50),
+        web_manager varchar(40),
+        web_mkt_id integer,
+        web_mkt_class varchar(50),
+        web_mkt_desc varchar(100),
+        web_market_manager varchar(40),
+        web_company_id integer,
+        web_company_name char(50),
+        web_street_number char(10),
+        web_street_name varchar(60),
+        web_street_type char(15),
+        web_suite_number char(10),
+        web_city varchar(60),
+        web_county varchar(30),
+        web_state char(2),
+        web_zip char(10),
+        web_country varchar(20),
+        web_gmt_offset decimalv3(5,2),
+        web_tax_percentage decimalv3(5,2)
+    )
+    DUPLICATE KEY(web_site_sk)
+    DISTRIBUTED BY HASH(web_site_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists promotion
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS promotion (
+        p_promo_sk bigint not null,
+        p_promo_id char(16) not null,
+        p_start_date_sk bigint,
+        p_end_date_sk bigint,
+        p_item_sk bigint,
+        p_cost decimalv3(15,2),
+        p_response_targe integer,
+        p_promo_name char(50),
+        p_channel_dmail char(1),
+        p_channel_email char(1),
+        p_channel_catalog char(1),
+        p_channel_tv char(1),
+        p_channel_radio char(1),
+        p_channel_press char(1),
+        p_channel_event char(1),
+        p_channel_demo char(1),
+        p_channel_details varchar(100),
+        p_purpose char(15),
+        p_discount_active char(1)
+    )
+    DUPLICATE KEY(p_promo_sk)
+    DISTRIBUTED BY HASH(p_promo_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists web_sales
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS web_sales (
+        ws_sold_date_sk bigint,
+        ws_item_sk bigint not null,
+        ws_order_number bigint not null,
+        ws_sold_time_sk bigint,
+        ws_ship_date_sk bigint,
+        ws_bill_customer_sk bigint,
+        ws_bill_cdemo_sk bigint,
+        ws_bill_hdemo_sk bigint,
+        ws_bill_addr_sk bigint,
+        ws_ship_customer_sk bigint,
+        ws_ship_cdemo_sk bigint,
+        ws_ship_hdemo_sk bigint,
+        ws_ship_addr_sk bigint,
+        ws_web_page_sk bigint,
+        ws_web_site_sk bigint,
+        ws_ship_mode_sk bigint,
+        ws_warehouse_sk bigint,
+        ws_promo_sk bigint,
+        ws_quantity integer,
+        ws_wholesale_cost decimalv3(7,2),
+        ws_list_price decimalv3(7,2),
+        ws_sales_price decimalv3(7,2),
+        ws_ext_discount_amt decimalv3(7,2),
+        ws_ext_sales_price decimalv3(7,2),
+        ws_ext_wholesale_cost decimalv3(7,2),
+        ws_ext_list_price decimalv3(7,2),
+        ws_ext_tax decimalv3(7,2),
+        ws_coupon_amt decimalv3(7,2),
+        ws_ext_ship_cost decimalv3(7,2),
+        ws_net_paid decimalv3(7,2),
+        ws_net_paid_inc_tax decimalv3(7,2),
+        ws_net_paid_inc_ship decimalv3(7,2),
+        ws_net_paid_inc_ship_tax decimalv3(7,2),
+        ws_net_profit decimalv3(7,2)
+    )
+    DUPLICATE KEY(ws_sold_date_sk, ws_item_sk)
+    DISTRIBUTED BY HASH(ws_item_sk, ws_order_number) BUCKETS 32
+    PROPERTIES (
+    "replication_num" = "1",
+    "colocate_with" = "web"
+    )
+    '''
+
+    sql '''
+    drop table if exists store
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS store (
+        s_store_sk bigint not null,
+        s_store_id char(16) not null,
+        s_rec_start_date datev2,
+        s_rec_end_date datev2,
+        s_closed_date_sk bigint,
+        s_store_name varchar(50),
+        s_number_employees integer,
+        s_floor_space integer,
+        s_hours char(20),
+        s_manager varchar(40),
+        s_market_id integer,
+        s_geography_class varchar(100),
+        s_market_desc varchar(100),
+        s_market_manager varchar(40),
+        s_division_id integer,
+        s_division_name varchar(50),
+        s_company_id integer,
+        s_company_name varchar(50),
+        s_street_number varchar(10),
+        s_street_name varchar(60),
+        s_street_type char(15),
+        s_suite_number char(10),
+        s_city varchar(60),
+        s_county varchar(30),
+        s_state char(2),
+        s_zip char(10),
+        s_country varchar(20),
+        s_gmt_offset decimalv3(5,2),
+        s_tax_precentage decimalv3(5,2)
+    )
+    DUPLICATE KEY(s_store_sk)
+    DISTRIBUTED BY HASH(s_store_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists time_dim
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS time_dim (
+        t_time_sk bigint not null,
+        t_time_id char(16) not null,
+        t_time integer,
+        t_hour integer,
+        t_minute integer,
+        t_second integer,
+        t_am_pm char(2),
+        t_shift char(20),
+        t_sub_shift char(20),
+        t_meal_time char(20)
+    )
+    DUPLICATE KEY(t_time_sk)
+    DISTRIBUTED BY HASH(t_time_sk) BUCKETS 12
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists web_page
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS web_page (
+            wp_web_page_sk bigint not null,
+            wp_web_page_id char(16) not null,
+            wp_rec_start_date datev2,
+            wp_rec_end_date datev2,
+            wp_creation_date_sk bigint,
+            wp_access_date_sk bigint,
+            wp_autogen_flag char(1),
+            wp_customer_sk bigint,
+            wp_url varchar(100),
+            wp_type char(50),
+            wp_char_count integer,
+            wp_link_count integer,
+            wp_image_count integer,
+            wp_max_ad_count integer
+    )
+    DUPLICATE KEY(wp_web_page_sk)
+    DISTRIBUTED BY HASH(wp_web_page_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists store_returns
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS store_returns (
+        sr_item_sk bigint not null,
+        sr_ticket_number bigint not null,
+        sr_returned_date_sk bigint,
+        sr_return_time_sk bigint,
+        sr_customer_sk bigint,
+        sr_cdemo_sk bigint,
+        sr_hdemo_sk bigint,
+        sr_addr_sk bigint,
+        sr_store_sk bigint,
+        sr_reason_sk bigint,
+        sr_return_quantity integer,
+        sr_return_amt decimalv3(7,2),
+        sr_return_tax decimalv3(7,2),
+        sr_return_amt_inc_tax decimalv3(7,2),
+        sr_fee decimalv3(7,2),
+        sr_return_ship_cost decimalv3(7,2),
+        sr_refunded_cash decimalv3(7,2),
+        sr_reversed_charge decimalv3(7,2),
+        sr_store_credit decimalv3(7,2),
+        sr_net_loss decimalv3(7,2)
+    )
+    duplicate key(sr_item_sk, sr_ticket_number)
+    distributed by hash (sr_item_sk, sr_ticket_number) buckets 32
+    properties (
+    "replication_num" = "1",
+    "colocate_with" = "store"
+    )
+    '''
+
+    sql '''
+    drop table if exists store_sales
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS store_sales (
+        ss_sold_date_sk bigint,
+        ss_item_sk bigint not null,
+        ss_ticket_number bigint not null,
+        ss_sold_time_sk bigint,
+        ss_customer_sk bigint,
+        ss_cdemo_sk bigint,
+        ss_hdemo_sk bigint,
+        ss_addr_sk bigint,
+        ss_store_sk bigint,
+        ss_promo_sk bigint,
+        ss_quantity integer,
+        ss_wholesale_cost decimalv3(7,2),
+        ss_list_price decimalv3(7,2),
+        ss_sales_price decimalv3(7,2),
+        ss_ext_discount_amt decimalv3(7,2),
+        ss_ext_sales_price decimalv3(7,2),
+        ss_ext_wholesale_cost decimalv3(7,2),
+        ss_ext_list_price decimalv3(7,2),
+        ss_ext_tax decimalv3(7,2),
+        ss_coupon_amt decimalv3(7,2),
+        ss_net_paid decimalv3(7,2),
+        ss_net_paid_inc_tax decimalv3(7,2),
+        ss_net_profit decimalv3(7,2)
+    )
+    DUPLICATE KEY(ss_sold_date_sk, ss_item_sk)
+    DISTRIBUTED BY HASH(ss_item_sk, ss_ticket_number) BUCKETS 32
+    PROPERTIES (
+    "replication_num" = "1",
+    "colocate_with" = "store"
+    )
+    '''
+
+    sql '''
+    drop table if exists ship_mode
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS ship_mode (
+        sm_ship_mode_sk bigint not null,
+        sm_ship_mode_id char(16) not null,
+        sm_type char(30),
+        sm_code char(10),
+        sm_carrier char(20),
+        sm_contract char(20)
+    )
+    DUPLICATE KEY(sm_ship_mode_sk)
+    DISTRIBUTED BY HASH(sm_ship_mode_sk) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists customer
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS customer (
+        c_customer_sk bigint not null,
+        c_customer_id char(16) not null,
+        c_current_cdemo_sk bigint,
+        c_current_hdemo_sk bigint,
+        c_current_addr_sk bigint,
+        c_first_shipto_date_sk bigint,
+        c_first_sales_date_sk bigint,
+        c_salutation char(10),
+        c_first_name char(20),
+        c_last_name char(30),
+        c_preferred_cust_flag char(1),
+        c_birth_day integer,
+        c_birth_month integer,
+        c_birth_year integer,
+        c_birth_country varchar(20),
+        c_login char(13),
+        c_email_address char(50),
+        c_last_review_date_sk bigint
+    )
+    DUPLICATE KEY(c_customer_sk)
+    DISTRIBUTED BY HASH(c_customer_id) BUCKETS 12
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+
+    sql '''
+    drop table if exists dbgen_version
+    '''
+
+    sql '''
+    CREATE TABLE IF NOT EXISTS dbgen_version
+    (
+        dv_version                varchar(16)                   ,
+        dv_create_date            datev2                        ,
+        dv_create_time            datetime                      ,
+        dv_cmdline_args           varchar(200)                  
+    )
+    DUPLICATE KEY(dv_version)
+    DISTRIBUTED BY HASH(dv_version) BUCKETS 1
+    PROPERTIES (
+    "replication_num" = "1"
+    )
+    '''
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query13.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query13.groovy
new file mode 100644
index 00000000000..f0a44ffff43
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query13.groovy
@@ -0,0 +1,81 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select avg(ss_quantity)
+       ,avg(ss_ext_sales_price)
+       ,avg(ss_ext_wholesale_cost)
+       ,sum(ss_ext_wholesale_cost)
+ from store_sales
+     ,store
+     ,customer_demographics
+     ,household_demographics
+     ,customer_address
+     ,date_dim
+ where s_store_sk = ss_store_sk
+ and  ss_sold_date_sk = d_date_sk and d_year = 2001
+ and((ss_hdemo_sk=hd_demo_sk
+  and cd_demo_sk = ss_cdemo_sk
+  and cd_marital_status = 'D'
+  and cd_education_status = 'Unknown'
+  and ss_sales_price between 100.00 and 150.00
+  and hd_dep_count = 3
+     )or
+     (ss_hdemo_sk=hd_demo_sk
+  and cd_demo_sk = ss_cdemo_sk
+  and cd_marital_status = 'S'
+  and cd_education_status = 'College'
+  and ss_sales_price between 50.00 and 100.00
+  and hd_dep_count = 1
+     ) or
+     (ss_hdemo_sk=hd_demo_sk
+  and cd_demo_sk = ss_cdemo_sk
+  and cd_marital_status = 'M'
+  and cd_education_status = '4 yr Degree'
+  and ss_sales_price between 150.00 and 200.00
+  and hd_dep_count = 1
+     ))
+ and((ss_addr_sk = ca_address_sk
+  and ca_country = 'United States'
+  and ca_state in ('SD', 'KS', 'MI')
+  and ss_net_profit between 100 and 200
+     ) or
+     (ss_addr_sk = ca_address_sk
+  and ca_country = 'United States'
+  and ca_state in ('MO', 'ND', 'CO')
+  and ss_net_profit between 150 and 300
+     ) or
+     (ss_addr_sk = ca_address_sk
+  and ca_country = 'United States'
+  and ca_state in ('NH', 'OH', 'TX')
+  and ss_net_profit between 50 and 250
+     ));"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("__avg_0"))
+    assertTrue(topPlan.contains("__avg_1"))
+    assertTrue(topPlan.contains("__avg_2"))
+    assertTrue(topPlan.contains("__sum_3"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query14.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query14.groovy
new file mode 100644
index 00000000000..6218108d388
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query14.groovy
@@ -0,0 +1,137 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+with  cross_items as
+ (select i_item_sk ss_item_sk
+ from item,
+ (select iss.i_brand_id brand_id
+     ,iss.i_class_id class_id
+     ,iss.i_category_id category_id
+ from store_sales
+     ,item iss
+     ,date_dim d1
+ where ss_item_sk = iss.i_item_sk
+   and ss_sold_date_sk = d1.d_date_sk
+   and d1.d_year between 2000 AND 2000 + 2
+ intersect
+ select ics.i_brand_id
+     ,ics.i_class_id
+     ,ics.i_category_id
+ from catalog_sales
+     ,item ics
+     ,date_dim d2
+ where cs_item_sk = ics.i_item_sk
+   and cs_sold_date_sk = d2.d_date_sk
+   and d2.d_year between 2000 AND 2000 + 2
+ intersect
+ select iws.i_brand_id
+     ,iws.i_class_id
+     ,iws.i_category_id
+ from web_sales
+     ,item iws
+     ,date_dim d3
+ where ws_item_sk = iws.i_item_sk
+   and ws_sold_date_sk = d3.d_date_sk
+   and d3.d_year between 2000 AND 2000 + 2)
+ t where i_brand_id = brand_id
+      and i_class_id = class_id
+      and i_category_id = category_id
+),
+ avg_sales as
+ (select avg(quantity*list_price) average_sales
+  from (select ss_quantity quantity
+             ,ss_list_price list_price
+       from store_sales
+           ,date_dim
+       where ss_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2
+       union all
+       select cs_quantity quantity
+             ,cs_list_price list_price
+       from catalog_sales
+           ,date_dim
+       where cs_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2
+       union all
+       select ws_quantity quantity
+             ,ws_list_price list_price
+       from web_sales
+           ,date_dim
+       where ws_sold_date_sk = d_date_sk
+         and d_year between 2000 and 2000 + 2) x)
+  select  channel, i_brand_id,i_class_id,i_category_id,sum(sales), 
sum(number_sales)
+ from(
+       select 'store' channel, i_brand_id,i_class_id
+             ,i_category_id,sum(ss_quantity*ss_list_price) sales
+             , count(*) number_sales
+       from store_sales
+           ,item
+           ,date_dim
+       where ss_item_sk in (select ss_item_sk from cross_items)
+         and ss_item_sk = i_item_sk
+         and ss_sold_date_sk = d_date_sk
+         and d_year = 2000+2
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(ss_quantity*ss_list_price) > (select average_sales from 
avg_sales)
+       union all
+       select 'catalog' channel, i_brand_id,i_class_id,i_category_id, 
sum(cs_quantity*cs_list_price) sales, count(*) number_sales
+       from catalog_sales
+           ,item
+           ,date_dim
+       where cs_item_sk in (select ss_item_sk from cross_items)
+         and cs_item_sk = i_item_sk
+         and cs_sold_date_sk = d_date_sk
+         and d_year = 2000+2
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(cs_quantity*cs_list_price) > (select average_sales from 
avg_sales)
+       union all
+       select 'web' channel, i_brand_id,i_class_id,i_category_id, 
sum(ws_quantity*ws_list_price) sales , count(*) number_sales
+       from web_sales
+           ,item
+           ,date_dim
+       where ws_item_sk in (select ss_item_sk from cross_items)
+         and ws_item_sk = i_item_sk
+         and ws_sold_date_sk = d_date_sk
+         and d_year = 2000+2
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(ws_quantity*ws_list_price) > (select average_sales from 
avg_sales)
+ ) y
+ group by rollup (channel, i_brand_id,i_class_id,i_category_id)
+ order by channel,i_brand_id,i_class_id,i_category_id
+ limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("channel"))
+    assertTrue(topPlan.contains("i_brand_id"))
+    assertTrue(topPlan.contains("i_class_id"))
+    assertTrue(topPlan.contains("i_category_id"))
+    assertTrue(topPlan.contains("__sum_4"))
+    assertTrue(topPlan.contains("__sum_5"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query15.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query15.groovy
new file mode 100644
index 00000000000..f7b87dc8e8e
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query15.groovy
@@ -0,0 +1,49 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  ca_zip
+       ,sum(cs_sales_price)
+ from catalog_sales
+     ,customer
+     ,customer_address
+     ,date_dim
+ where cs_bill_customer_sk = c_customer_sk
+       and c_current_addr_sk = ca_address_sk
+       and ( substr(ca_zip,1,5) in ('85669', '86197','88274','83405','86475',
+                                   '85392', '85460', '80348', '81792')
+             or ca_state in ('CA','WA','GA')
+             or cs_sales_price > 500)
+       and cs_sold_date_sk = d_date_sk
+       and d_qoy = 1 and d_year = 2001
+ group by ca_zip
+ order by ca_zip
+ limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("ca_zip"))
+    assertTrue(topPlan.contains("__sum_1"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query2.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query2.groovy
new file mode 100644
index 00000000000..8ea2ff18a9a
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query2.groovy
@@ -0,0 +1,94 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+with wscs as
+ (select sold_date_sk
+        ,sales_price
+  from (select ws_sold_date_sk sold_date_sk
+              ,ws_ext_sales_price sales_price
+        from web_sales
+        union all
+        select cs_sold_date_sk sold_date_sk
+              ,cs_ext_sales_price sales_price
+        from catalog_sales) t),
+ wswscs as
+ (select d_week_seq,
+        sum(case when (d_day_name='Sunday') then sales_price else null end) 
sun_sales,
+        sum(case when (d_day_name='Monday') then sales_price else null end) 
mon_sales,
+        sum(case when (d_day_name='Tuesday') then sales_price else  null end) 
tue_sales,
+        sum(case when (d_day_name='Wednesday') then sales_price else null end) 
wed_sales,
+        sum(case when (d_day_name='Thursday') then sales_price else null end) 
thu_sales,
+        sum(case when (d_day_name='Friday') then sales_price else null end) 
fri_sales,
+        sum(case when (d_day_name='Saturday') then sales_price else null end) 
sat_sales
+ from wscs
+     ,date_dim
+ where d_date_sk = sold_date_sk
+ group by d_week_seq)
+ select d_week_seq1
+       ,round(sun_sales1/sun_sales2,2)
+       ,round(mon_sales1/mon_sales2,2)
+       ,round(tue_sales1/tue_sales2,2)
+       ,round(wed_sales1/wed_sales2,2)
+       ,round(thu_sales1/thu_sales2,2)
+       ,round(fri_sales1/fri_sales2,2)
+       ,round(sat_sales1/sat_sales2,2)
+ from
+ (select wswscs.d_week_seq d_week_seq1
+        ,sun_sales sun_sales1
+        ,mon_sales mon_sales1
+        ,tue_sales tue_sales1
+        ,wed_sales wed_sales1
+        ,thu_sales thu_sales1
+        ,fri_sales fri_sales1
+        ,sat_sales sat_sales1
+  from wswscs,date_dim
+  where date_dim.d_week_seq = wswscs.d_week_seq and
+        d_year = 1998) y,
+ (select wswscs.d_week_seq d_week_seq2
+        ,sun_sales sun_sales2
+        ,mon_sales mon_sales2
+        ,tue_sales tue_sales2
+        ,wed_sales wed_sales2
+        ,thu_sales thu_sales2
+        ,fri_sales fri_sales2
+        ,sat_sales sat_sales2
+  from wswscs
+      ,date_dim
+  where date_dim.d_week_seq = wswscs.d_week_seq and
+        d_year = 1998+1) z
+ where d_week_seq1=d_week_seq2-53
+ order by d_week_seq1;"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("d_week_seq1"))
+    assertTrue(topPlan.contains("__round_1"))
+    assertTrue(topPlan.contains("__round_2"))
+    assertTrue(topPlan.contains("__round_3"))
+    assertTrue(topPlan.contains("__round_4"))
+    assertTrue(topPlan.contains("__round_5"))
+    assertTrue(topPlan.contains("__round_6"))
+    assertTrue(topPlan.contains("__round_7"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query23.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query23.groovy
new file mode 100644
index 00000000000..0480d314e31
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query23.groovy
@@ -0,0 +1,80 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+with frequent_ss_items as
+ (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date 
solddate,count(*) cnt
+  from store_sales
+      ,date_dim
+      ,item
+  where ss_sold_date_sk = d_date_sk
+    and ss_item_sk = i_item_sk
+    and d_year in (2000,2000+1,2000+2,2000+3)
+  group by substr(i_item_desc,1,30),i_item_sk,d_date
+  having count(*) >4),
+ max_store_sales as
+ (select max(csales) tpcds_cmax
+  from (select c_customer_sk,sum(ss_quantity*ss_sales_price) csales
+        from store_sales
+            ,customer
+            ,date_dim
+        where ss_customer_sk = c_customer_sk
+         and ss_sold_date_sk = d_date_sk
+         and d_year in (2000,2000+1,2000+2,2000+3)
+        group by c_customer_sk) t),
+ best_ss_customer as
+ (select c_customer_sk,sum(ss_quantity*ss_sales_price) ssales
+  from store_sales
+      ,customer
+  where ss_customer_sk = c_customer_sk
+  group by c_customer_sk
+  having sum(ss_quantity*ss_sales_price) > (95/100.0) * (select
+  *
+from
+ max_store_sales))
+  select  sum(sales)
+ from (select cs_quantity*cs_list_price sales
+       from catalog_sales
+           ,date_dim
+       where d_year = 2000
+         and d_moy = 5
+         and cs_sold_date_sk = d_date_sk
+         and cs_item_sk in (select item_sk from frequent_ss_items)
+         and cs_bill_customer_sk in (select c_customer_sk from 
best_ss_customer)
+      union all
+      select ws_quantity*ws_list_price sales
+       from web_sales
+           ,date_dim
+       where d_year = 2000
+         and d_moy = 5
+         and ws_sold_date_sk = d_date_sk
+         and ws_item_sk in (select item_sk from frequent_ss_items)
+         and ws_bill_customer_sk in (select c_customer_sk from 
best_ss_customer)) t2
+ limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("__sum_0"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query35.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query35.groovy
new file mode 100644
index 00000000000..f10efec6dbf
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query35.groovy
@@ -0,0 +1,102 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select
+  ca_state,
+  cd_gender,
+  cd_marital_status,
+  cd_dep_count,
+  count(*) cnt1,
+  max(cd_dep_count),
+  sum(cd_dep_count),
+  max(cd_dep_count),
+  cd_dep_employed_count,
+  count(*) cnt2,
+  max(cd_dep_employed_count),
+  sum(cd_dep_employed_count),
+  max(cd_dep_employed_count),
+  cd_dep_college_count,
+  count(*) cnt3,
+  max(cd_dep_college_count),
+  sum(cd_dep_college_count),
+  max(cd_dep_college_count)
+ from
+  customer c,customer_address ca,customer_demographics
+ where
+  c.c_current_addr_sk = ca.ca_address_sk and
+  cd_demo_sk = c.c_current_cdemo_sk and
+  exists (select *
+          from store_sales,date_dim
+          where c.c_customer_sk = ss_customer_sk and
+                ss_sold_date_sk = d_date_sk and
+                d_year = 2001 and
+                d_qoy < 4) and
+   (exists (select *
+            from web_sales,date_dim
+            where c.c_customer_sk = ws_bill_customer_sk and
+                  ws_sold_date_sk = d_date_sk and
+                  d_year = 2001 and
+                  d_qoy < 4) or
+    exists (select *
+            from catalog_sales,date_dim
+            where c.c_customer_sk = cs_ship_customer_sk and
+                  cs_sold_date_sk = d_date_sk and
+                  d_year = 2001 and
+                  d_qoy < 4))
+ group by ca_state,
+          cd_gender,
+          cd_marital_status,
+          cd_dep_count,
+          cd_dep_employed_count,
+          cd_dep_college_count
+ order by ca_state,
+          cd_gender,
+          cd_marital_status,
+          cd_dep_count,
+          cd_dep_employed_count,
+          cd_dep_college_count
+ limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("ca_state"))
+    assertTrue(topPlan.contains("cd_gender"))
+    assertTrue(topPlan.contains("cd_marital_status"))
+    assertTrue(topPlan.contains("cd_dep_count"))
+    assertTrue(topPlan.contains("cnt1"))
+    assertTrue(topPlan.contains("__max_5"))
+    assertTrue(topPlan.contains("__sum_6"))
+    assertTrue(topPlan.contains("__max_7"))
+    assertTrue(topPlan.contains("cd_dep_employed_count"))
+    assertTrue(topPlan.contains("cnt2"))
+    assertTrue(topPlan.contains("__max_10"))
+    assertTrue(topPlan.contains("__sum_11"))
+    assertTrue(topPlan.contains("__max_12"))
+    assertTrue(topPlan.contains("cd_dep_college_count"))
+    assertTrue(topPlan.contains("cnt3"))
+    assertTrue(topPlan.contains("__sum_16"))
+    assertTrue(topPlan.contains("__max_17"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query38.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query38.groovy
new file mode 100644
index 00000000000..a1182b55c34
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query38.groovy
@@ -0,0 +1,51 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  count(*) from (
+    select distinct c_last_name, c_first_name, d_date
+    from store_sales, date_dim, customer
+          where store_sales.ss_sold_date_sk = date_dim.d_date_sk
+      and store_sales.ss_customer_sk = customer.c_customer_sk
+      and d_month_seq between 1183 and 1183 + 11
+  intersect
+    select distinct c_last_name, c_first_name, d_date
+    from catalog_sales, date_dim, customer
+          where catalog_sales.cs_sold_date_sk = date_dim.d_date_sk
+      and catalog_sales.cs_bill_customer_sk = customer.c_customer_sk
+      and d_month_seq between 1183 and 1183 + 11
+  intersect
+    select distinct c_last_name, c_first_name, d_date
+    from web_sales, date_dim, customer
+          where web_sales.ws_sold_date_sk = date_dim.d_date_sk
+      and web_sales.ws_bill_customer_sk = customer.c_customer_sk
+      and d_month_seq between 1183 and 1183 + 11
+) hot_cust
+limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("__count_0"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query41.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query41.groovy
new file mode 100644
index 00000000000..46a8a7909ca
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query41.groovy
@@ -0,0 +1,80 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  distinct(i_product_name)
+ from item i1
+ where i_manufact_id between 748 and 748+40 
+   and (select count(*) as item_cnt
+        from item
+        where (i_manufact = i1.i_manufact and
+        ((i_category = 'Women' and 
+        (i_color = 'gainsboro' or i_color = 'aquamarine') and 
+        (i_units = 'Ounce' or i_units = 'Dozen') and
+        (i_size = 'medium' or i_size = 'economy')
+        ) or
+        (i_category = 'Women' and
+        (i_color = 'chiffon' or i_color = 'violet') and
+        (i_units = 'Ton' or i_units = 'Pound') and
+        (i_size = 'extra large' or i_size = 'small')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'chartreuse' or i_color = 'blue') and
+        (i_units = 'Each' or i_units = 'Oz') and
+        (i_size = 'N/A' or i_size = 'large')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'tan' or i_color = 'dodger') and
+        (i_units = 'Bunch' or i_units = 'Tsp') and
+        (i_size = 'medium' or i_size = 'economy')
+        ))) or
+       (i_manufact = i1.i_manufact and
+        ((i_category = 'Women' and 
+        (i_color = 'blanched' or i_color = 'tomato') and 
+        (i_units = 'Tbl' or i_units = 'Case') and
+        (i_size = 'medium' or i_size = 'economy')
+        ) or
+        (i_category = 'Women' and
+        (i_color = 'almond' or i_color = 'lime') and
+        (i_units = 'Box' or i_units = 'Dram') and
+        (i_size = 'extra large' or i_size = 'small')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'peru' or i_color = 'saddle') and
+        (i_units = 'Pallet' or i_units = 'Gram') and
+        (i_size = 'N/A' or i_size = 'large')
+        ) or
+        (i_category = 'Men' and
+        (i_color = 'indian' or i_color = 'spring') and
+        (i_units = 'Unknown' or i_units = 'Carton') and
+        (i_size = 'medium' or i_size = 'economy')
+        )))) > 0
+ order by i_product_name
+ limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("i_product_name"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query42.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query42.groovy
new file mode 100644
index 00000000000..045b8202a13
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query42.groovy
@@ -0,0 +1,53 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  dt.d_year
+       ,item.i_category_id
+       ,item.i_category
+       ,sum(ss_ext_sales_price)
+ from  date_dim dt
+       ,store_sales
+       ,item
+ where dt.d_date_sk = store_sales.ss_sold_date_sk
+       and store_sales.ss_item_sk = item.i_item_sk
+       and item.i_manager_id = 1       
+       and dt.d_moy=11
+       and dt.d_year=2002
+ group by      dt.d_year
+               ,item.i_category_id
+               ,item.i_category
+ order by       sum(ss_ext_sales_price) desc,dt.d_year
+               ,item.i_category_id
+               ,item.i_category
+limit 100 ;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("d_year"))
+    assertTrue(topPlan.contains("i_category_id"))
+    assertTrue(topPlan.contains("i_category"))
+    assertTrue(topPlan.contains("__sum_3"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query45.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query45.groovy
new file mode 100644
index 00000000000..d0203b66508
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query45.groovy
@@ -0,0 +1,50 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  ca_zip, ca_city, sum(ws_sales_price)
+ from web_sales, customer, customer_address, date_dim, item
+ where ws_bill_customer_sk = c_customer_sk
+       and c_current_addr_sk = ca_address_sk 
+       and ws_item_sk = i_item_sk 
+       and ( substr(ca_zip,1,5) in ('85669', '86197','88274','83405','86475', 
'85392', '85460', '80348', '81792')
+             or 
+             i_item_id in (select i_item_id
+                             from item
+                             where i_item_sk in (2, 3, 5, 7, 11, 13, 17, 19, 
23, 29)
+                             )
+           )
+       and ws_sold_date_sk = d_date_sk
+       and d_qoy = 2 and d_year = 2000
+ group by ca_zip, ca_city
+ order by ca_zip, ca_city
+ limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("ca_zip"))
+    assertTrue(topPlan.contains("ca_city"))
+    assertTrue(topPlan.contains("__sum_2"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query59.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query59.groovy
new file mode 100644
index 00000000000..7df0d53bc53
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query59.groovy
@@ -0,0 +1,81 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+with wss as 
+ (select d_week_seq,
+        ss_store_sk,
+        sum(case when (d_day_name='Sunday') then ss_sales_price else null end) 
sun_sales,
+        sum(case when (d_day_name='Monday') then ss_sales_price else null end) 
mon_sales,
+        sum(case when (d_day_name='Tuesday') then ss_sales_price else  null 
end) tue_sales,
+        sum(case when (d_day_name='Wednesday') then ss_sales_price else null 
end) wed_sales,
+        sum(case when (d_day_name='Thursday') then ss_sales_price else null 
end) thu_sales,
+        sum(case when (d_day_name='Friday') then ss_sales_price else null end) 
fri_sales,
+        sum(case when (d_day_name='Saturday') then ss_sales_price else null 
end) sat_sales
+ from store_sales,date_dim
+ where d_date_sk = ss_sold_date_sk
+ group by d_week_seq,ss_store_sk
+ )
+  select  s_store_name1,s_store_id1,d_week_seq1
+       ,sun_sales1/sun_sales2,mon_sales1/mon_sales2
+       ,tue_sales1/tue_sales2,wed_sales1/wed_sales2,thu_sales1/thu_sales2
+       ,fri_sales1/fri_sales2,sat_sales1/sat_sales2
+ from
+ (select s_store_name s_store_name1,wss.d_week_seq d_week_seq1
+        ,s_store_id s_store_id1,sun_sales sun_sales1
+        ,mon_sales mon_sales1,tue_sales tue_sales1
+        ,wed_sales wed_sales1,thu_sales thu_sales1
+        ,fri_sales fri_sales1,sat_sales sat_sales1
+  from wss,store,date_dim d
+  where d.d_week_seq = wss.d_week_seq and
+        ss_store_sk = s_store_sk and 
+        d_month_seq between 1196 and 1196 + 11) y,
+ (select s_store_name s_store_name2,wss.d_week_seq d_week_seq2
+        ,s_store_id s_store_id2,sun_sales sun_sales2
+        ,mon_sales mon_sales2,tue_sales tue_sales2
+        ,wed_sales wed_sales2,thu_sales thu_sales2
+        ,fri_sales fri_sales2,sat_sales sat_sales2
+  from wss,store,date_dim d
+  where d.d_week_seq = wss.d_week_seq and
+        ss_store_sk = s_store_sk and 
+        d_month_seq between 1196+ 12 and 1196 + 23) x
+ where s_store_id1=s_store_id2
+   and d_week_seq1=d_week_seq2-52
+ order by s_store_name1,s_store_id1,d_week_seq1
+limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("s_store_name1"))
+    assertTrue(topPlan.contains("s_store_id1"))
+    assertTrue(topPlan.contains("d_week_seq1"))
+    assertTrue(topPlan.contains("__divide_3"))
+    assertTrue(topPlan.contains("__divide_4"))
+    assertTrue(topPlan.contains("__divide_5"))
+    assertTrue(topPlan.contains("__divide_6"))
+    assertTrue(topPlan.contains("__divide_7"))
+    assertTrue(topPlan.contains("__divide_8"))
+    assertTrue(topPlan.contains("__divide_9"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query61.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query61.groovy
new file mode 100644
index 00000000000..2aa572e5b23
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query61.groovy
@@ -0,0 +1,74 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  promotions,total,cast(promotions as decimal(15,4))/cast(total as 
decimal(15,4))*100
+from
+  (select sum(ss_ext_sales_price) promotions
+   from  store_sales
+        ,store
+        ,promotion
+        ,date_dim
+        ,customer
+        ,customer_address 
+        ,item
+   where ss_sold_date_sk = d_date_sk
+   and   ss_store_sk = s_store_sk
+   and   ss_promo_sk = p_promo_sk
+   and   ss_customer_sk= c_customer_sk
+   and   ca_address_sk = c_current_addr_sk
+   and   ss_item_sk = i_item_sk 
+   and   ca_gmt_offset = -7
+   and   i_category = 'Jewelry'
+   and   (p_channel_dmail = 'Y' or p_channel_email = 'Y' or p_channel_tv = 'Y')
+   and   s_gmt_offset = -7
+   and   d_year = 1999
+   and   d_moy  = 11) promotional_sales,
+  (select sum(ss_ext_sales_price) total
+   from  store_sales
+        ,store
+        ,date_dim
+        ,customer
+        ,customer_address
+        ,item
+   where ss_sold_date_sk = d_date_sk
+   and   ss_store_sk = s_store_sk
+   and   ss_customer_sk= c_customer_sk
+   and   ca_address_sk = c_current_addr_sk
+   and   ss_item_sk = i_item_sk
+   and   ca_gmt_offset = -7
+   and   i_category = 'Jewelry'
+   and   s_gmt_offset = -7
+   and   d_year = 1999
+   and   d_moy  = 11) all_sales
+order by promotions, total
+limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("promotions"))
+    assertTrue(topPlan.contains("total"))
+    assertTrue(topPlan.contains("__multiply_2"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query62.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query62.groovy
new file mode 100644
index 00000000000..47c2924afd7
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query62.groovy
@@ -0,0 +1,63 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  
+   substr(w_warehouse_name,1,20)
+  ,sm_type
+  ,web_name
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk <= 30 ) then 1 else 0 end) 
 as "30 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 30) and 
+                 (ws_ship_date_sk - ws_sold_date_sk <= 60) then 1 else 0 end ) 
 as "31-60 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 60) and 
+                 (ws_ship_date_sk - ws_sold_date_sk <= 90) then 1 else 0 end)  
as "61-90 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk > 90) and
+                 (ws_ship_date_sk - ws_sold_date_sk <= 120) then 1 else 0 end) 
 as "91-120 days" 
+  ,sum(case when (ws_ship_date_sk - ws_sold_date_sk  > 120) then 1 else 0 end) 
 as ">120 days" 
+from
+   web_sales
+  ,warehouse
+  ,ship_mode
+  ,web_site
+  ,date_dim
+where
+    d_month_seq between 1194 and 1194 + 11
+and ws_ship_date_sk   = d_date_sk
+and ws_warehouse_sk   = w_warehouse_sk
+and ws_ship_mode_sk   = sm_ship_mode_sk
+and ws_web_site_sk    = web_site_sk
+group by
+   substr(w_warehouse_name,1,20)
+  ,sm_type
+  ,web_name
+order by substr(w_warehouse_name,1,20)
+        ,sm_type
+       ,web_name
+limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("__substring_0"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query8.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query8.groovy
new file mode 100644
index 00000000000..c73af1e1c49
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query8.groovy
@@ -0,0 +1,136 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  s_store_name
+      ,sum(ss_net_profit)
+ from store_sales
+     ,date_dim
+     ,store,
+     (select ca_zip
+     from (
+      SELECT substr(ca_zip,1,5) ca_zip
+      FROM customer_address
+      WHERE substr(ca_zip,1,5) IN (
+                          '47602','16704','35863','28577','83910','36201',
+                          '58412','48162','28055','41419','80332',
+                          '38607','77817','24891','16226','18410',
+                          '21231','59345','13918','51089','20317',
+                          '17167','54585','67881','78366','47770',
+                          '18360','51717','73108','14440','21800',
+                          '89338','45859','65501','34948','25973',
+                          '73219','25333','17291','10374','18829',
+                          '60736','82620','41351','52094','19326',
+                          '25214','54207','40936','21814','79077',
+                          '25178','75742','77454','30621','89193',
+                          '27369','41232','48567','83041','71948',
+                          '37119','68341','14073','16891','62878',
+                          '49130','19833','24286','27700','40979',
+                          '50412','81504','94835','84844','71954',
+                          '39503','57649','18434','24987','12350',
+                          '86379','27413','44529','98569','16515',
+                          '27287','24255','21094','16005','56436',
+                          '91110','68293','56455','54558','10298',
+                          '83647','32754','27052','51766','19444',
+                          '13869','45645','94791','57631','20712',
+                          '37788','41807','46507','21727','71836',
+                          '81070','50632','88086','63991','20244',
+                          '31655','51782','29818','63792','68605',
+                          '94898','36430','57025','20601','82080',
+                          '33869','22728','35834','29086','92645',
+                          '98584','98072','11652','78093','57553',
+                          '43830','71144','53565','18700','90209',
+                          '71256','38353','54364','28571','96560',
+                          '57839','56355','50679','45266','84680',
+                          '34306','34972','48530','30106','15371',
+                          '92380','84247','92292','68852','13338',
+                          '34594','82602','70073','98069','85066',
+                          '47289','11686','98862','26217','47529',
+                          '63294','51793','35926','24227','14196',
+                          '24594','32489','99060','49472','43432',
+                          '49211','14312','88137','47369','56877',
+                          '20534','81755','15794','12318','21060',
+                          '73134','41255','63073','81003','73873',
+                          '66057','51184','51195','45676','92696',
+                          '70450','90669','98338','25264','38919',
+                          '59226','58581','60298','17895','19489',
+                          '52301','80846','95464','68770','51634',
+                          '19988','18367','18421','11618','67975',
+                          '25494','41352','95430','15734','62585',
+                          '97173','33773','10425','75675','53535',
+                          '17879','41967','12197','67998','79658',
+                          '59130','72592','14851','43933','68101',
+                          '50636','25717','71286','24660','58058',
+                          '72991','95042','15543','33122','69280',
+                          '11912','59386','27642','65177','17672',
+                          '33467','64592','36335','54010','18767',
+                          '63193','42361','49254','33113','33159',
+                          '36479','59080','11855','81963','31016',
+                          '49140','29392','41836','32958','53163',
+                          '13844','73146','23952','65148','93498',
+                          '14530','46131','58454','13376','13378',
+                          '83986','12320','17193','59852','46081',
+                          '98533','52389','13086','68843','31013',
+                          '13261','60560','13443','45533','83583',
+                          '11489','58218','19753','22911','25115',
+                          '86709','27156','32669','13123','51933',
+                          '39214','41331','66943','14155','69998',
+                          '49101','70070','35076','14242','73021',
+                          '59494','15782','29752','37914','74686',
+                          '83086','34473','15751','81084','49230',
+                          '91894','60624','17819','28810','63180',
+                          '56224','39459','55233','75752','43639',
+                          '55349','86057','62361','50788','31830',
+                          '58062','18218','85761','60083','45484',
+                          '21204','90229','70041','41162','35390',
+                          '16364','39500','68908','26689','52868',
+                          '81335','40146','11340','61527','61794',
+                          '71997','30415','59004','29450','58117',
+                          '69952','33562','83833','27385','61860',
+                          '96435','48333','23065','32961','84919',
+                          '61997','99132','22815','56600','68730',
+                          '48017','95694','32919','88217','27116',
+                          '28239','58032','18884','16791','21343',
+                          '97462','18569','75660','15475')
+     intersect
+      select ca_zip
+      from (SELECT substr(ca_zip,1,5) ca_zip,count(*) cnt
+            FROM customer_address, customer
+            WHERE ca_address_sk = c_current_addr_sk and
+                  c_preferred_cust_flag='Y'
+            group by ca_zip
+            having count(*) > 10)A1)A2) V1
+ where ss_store_sk = s_store_sk
+  and ss_sold_date_sk = d_date_sk
+  and d_qoy = 2 and d_year = 1998
+  and (substr(s_zip,1,2) = substr(V1.ca_zip,1,2))
+ group by s_store_name
+ order by s_store_name
+ limit 100;"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("s_store_name"))
+    assertTrue(topPlan.contains("__sum_1"))
+}
\ No newline at end of file
diff --git a/regression-test/suites/nereids_p0/infer_expr_name/query85.groovy 
b/regression-test/suites/nereids_p0/infer_expr_name/query85.groovy
new file mode 100644
index 00000000000..88970ce6b1a
--- /dev/null
+++ b/regression-test/suites/nereids_p0/infer_expr_name/query85.groovy
@@ -0,0 +1,115 @@
+// 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 infer_expr_name
+
+suite("nereids_test_create_blocked") {
+    sql 'set enable_nereids_planner=true'
+    sql 'set enable_fallback_to_original_planner=false'
+
+    def queryResult = sql """
+explain analyzed plan
+select  substr(r_reason_desc,1,20)
+       ,avg(ws_quantity)
+       ,avg(wr_refunded_cash)
+       ,avg(wr_fee)
+ from web_sales, web_returns, web_page, customer_demographics cd1,
+      customer_demographics cd2, customer_address, date_dim, reason 
+ where ws_web_page_sk = wp_web_page_sk
+   and ws_item_sk = wr_item_sk
+   and ws_order_number = wr_order_number
+   and ws_sold_date_sk = d_date_sk and d_year = 2000
+   and cd1.cd_demo_sk = wr_refunded_cdemo_sk 
+   and cd2.cd_demo_sk = wr_returning_cdemo_sk
+   and ca_address_sk = wr_refunded_addr_sk
+   and r_reason_sk = wr_reason_sk
+   and
+   (
+    (
+     cd1.cd_marital_status = 'M'
+     and
+     cd1.cd_marital_status = cd2.cd_marital_status
+     and
+     cd1.cd_education_status = '4 yr Degree'
+     and 
+     cd1.cd_education_status = cd2.cd_education_status
+     and
+     ws_sales_price between 100.00 and 150.00
+    )
+   or
+    (
+     cd1.cd_marital_status = 'S'
+     and
+     cd1.cd_marital_status = cd2.cd_marital_status
+     and
+     cd1.cd_education_status = 'Secondary' 
+     and
+     cd1.cd_education_status = cd2.cd_education_status
+     and
+     ws_sales_price between 50.00 and 100.00
+    )
+   or
+    (
+     cd1.cd_marital_status = 'W'
+     and
+     cd1.cd_marital_status = cd2.cd_marital_status
+     and
+     cd1.cd_education_status = 'Advanced Degree'
+     and
+     cd1.cd_education_status = cd2.cd_education_status
+     and
+     ws_sales_price between 150.00 and 200.00
+    )
+   )
+   and
+   (
+    (
+     ca_country = 'United States'
+     and
+     ca_state in ('FL', 'TX', 'DE')
+     and ws_net_profit between 100 and 200  
+    )
+    or
+    (
+     ca_country = 'United States'
+     and
+     ca_state in ('IN', 'ND', 'ID')
+     and ws_net_profit between 150 and 300  
+    )
+    or
+    (
+     ca_country = 'United States'
+     and
+     ca_state in ('MT', 'IL', 'OH')
+     and ws_net_profit between 50 and 250  
+    )
+   )
+group by r_reason_desc
+order by substr(r_reason_desc,1,20)
+        ,avg(ws_quantity)
+        ,avg(wr_refunded_cash)
+        ,avg(wr_fee)
+limit 100;
+"""
+
+    def topPlan = queryResult[0][0].toString()
+    assertTrue(topPlan.contains("LogicalResultSink"))
+    assertTrue(topPlan.contains("__substring_0"))
+    assertTrue(topPlan.contains("__avg_1"))
+    assertTrue(topPlan.contains("__avg_2"))
+    assertTrue(topPlan.contains("__avg_3"))
+}
\ No newline at end of file


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

Reply via email to