This is an automated email from the ASF dual-hosted git repository.
starocean999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 0e1e4c8508c [opt](nereids) disable infer column name when query
(#27450)
0e1e4c8508c is described below
commit 0e1e4c8508cda8d32cce9a02859f1418856cdefe
Author: seawinde <[email protected]>
AuthorDate: Mon Nov 27 11:26:17 2023 +0800
[opt](nereids) disable infer column name when query (#27450)
Disable infer column name when query, because it cause some errors when
using BI tools
This feature is firstly developed by #26055
---
.../main/java/org/apache/doris/analysis/SelectStmt.java | 11 +++++++----
.../doris/nereids/rules/analysis/BindExpression.java | 12 ++++++++++--
.../java/org/apache/doris/qe/OlapQueryCacheTest.java | 16 ++++++++--------
3 files changed, 25 insertions(+), 14 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 dca02e091e7..e80f49dcb61 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,11 +554,14 @@ public class SelectStmt extends QueryStmt {
}
resultExprs.add(rewriteQueryExprByMvColumnExpr(item.getExpr(), analyzer));
String columnLabel = null;
- // Infer column name when item is expr, both query and ddl
- columnLabel = item.toColumnLabel(i);
+ 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);
+ }
if (columnLabel == null) {
- // column label without position is applicative for
query and do not infer
- // column name when item is expr
+ // use original column label
columnLabel = item.toColumnLabel();
}
SlotRef aliasRef = new SlotRef(null, columnLabel);
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 2608a554fc9..9f267cd4712 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
@@ -70,6 +70,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.trees.plans.logical.LogicalRepeat;
import org.apache.doris.nereids.trees.plans.logical.LogicalResultSink;
import org.apache.doris.nereids.trees.plans.logical.LogicalSetOperation;
+import org.apache.doris.nereids.trees.plans.logical.LogicalSink;
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;
@@ -581,8 +582,15 @@ public class BindExpression implements AnalysisRuleFactory
{
})
),
RuleType.BINDING_RESULT_SINK.build(
- unboundResultSink().then(sink -> {
-
+ unboundResultSink().thenApply(ctx -> {
+ LogicalSink<Plan> sink = ctx.root;
+ if (ctx.connectContext.getState().isQuery()) {
+ List<NamedExpression> outputExprs =
sink.child().getOutput().stream()
+ .map(NamedExpression.class::cast)
+ .collect(ImmutableList.toImmutableList());
+ return new LogicalResultSink<>(outputExprs,
sink.child());
+ }
+ // Should infer column name for expression when query
command
final ImmutableListMultimap.Builder<ExprId, Integer>
exprIdToIndexMapBuilder =
ImmutableListMultimap.builder();
List<Slot> childOutput = sink.child().getOutput();
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 c5935a58e3e..f4ffeeb6e74 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
@@ -979,10 +979,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_1` "
+ "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`");
+ + "FROM `testCluster:testDb`.`appevent` WHERE
`eventid` = 1 GROUP BY `eventdate`) tbl "
+ + "GROUP BY `eventdate`");
PartitionRange range = cache.getPartitionRange();
boolean flag = range.analytics();
@@ -1001,11 +1001,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_1` "
+ "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`");
+ + "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());
@@ -1056,8 +1056,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_1` FROM `testCluster:testDb`.`appevent` WHERE
`eventdate` >= '2020-01-12' AND "
- + "`eventdate` <= '2020-01-14' GROUP BY `eventdate`|");
+ + "AS `count(``userid``)` FROM `testCluster:testDb`.`appevent`
WHERE `eventdate` >= '2020-01-12' "
+ + "AND `eventdate` <= '2020-01-14' GROUP BY `eventdate`|");
Assert.assertEquals(selectedPartitionIds.size(),
sqlCache.getSumOfPartitionNum());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]