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 fc0a48f9386 [opt](Nereids) normalize column name of output file
(#34650)
fc0a48f9386 is described below
commit fc0a48f9386a142005f765c971d8b926f9e76d5b
Author: morrySnow <[email protected]>
AuthorDate: Sat May 11 14:46:51 2024 +0800
[opt](Nereids) normalize column name of output file (#34650)
when do export to output file, normalize column name.
For example
> SELECT 1 > 2 INTO OUTFILE "..."
the column name of 1 > 2 will be __greater_than_0
---
.../doris/nereids/rules/analysis/BindSink.java | 23 +++++++++----
.../test_outfile_expr_generate_col_name.out | 38 +++++++++++-----------
.../test_outfile_expr_generate_col_name.groovy | 3 --
3 files changed, 36 insertions(+), 28 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
index 2400337d50e..7a56d2523e0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSink.java
@@ -43,8 +43,10 @@ import
org.apache.doris.nereids.rules.expression.rules.FunctionBinder;
import org.apache.doris.nereids.trees.expressions.Alias;
import org.apache.doris.nereids.trees.expressions.Cast;
import org.apache.doris.nereids.trees.expressions.DefaultValueSlot;
+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.Slot;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Substring;
import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.expressions.literal.NullLiteral;
@@ -58,6 +60,7 @@ import
org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.nereids.trees.plans.logical.LogicalTableSink;
import org.apache.doris.nereids.trees.plans.logical.UnboundLogicalSink;
+import org.apache.doris.nereids.trees.plans.visitor.InferPlanOutputAlias;
import org.apache.doris.nereids.types.DataType;
import org.apache.doris.nereids.types.StringType;
import org.apache.doris.nereids.types.coercion.CharacterType;
@@ -66,6 +69,7 @@ import org.apache.doris.nereids.util.TypeCoercionUtils;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableListMultimap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
@@ -83,12 +87,19 @@ public class BindSink implements AnalysisRuleFactory {
public List<Rule> buildRules() {
return ImmutableList.of(
RuleType.BINDING_INSERT_TARGET_TABLE.build(unboundTableSink().thenApply(this::bindOlapTableSink)),
- RuleType.BINDING_INSERT_FILE.build(
- logicalFileSink().when(s ->
s.getOutputExprs().isEmpty())
- .then(fileSink -> fileSink.withOutputExprs(
- fileSink.child().getOutput().stream()
-
.map(NamedExpression.class::cast)
-
.collect(ImmutableList.toImmutableList())))
+ RuleType.BINDING_INSERT_FILE.build(logicalFileSink().when(s ->
s.getOutputExprs().isEmpty())
+ .then(fileSink -> {
+ ImmutableListMultimap.Builder<ExprId, Integer>
exprIdToIndexMapBuilder =
+ ImmutableListMultimap.builder();
+ List<Slot> childOutput =
fileSink.child().getOutput();
+ for (int index = 0; index < childOutput.size();
index++) {
+
exprIdToIndexMapBuilder.put(childOutput.get(index).getExprId(), index);
+ }
+ InferPlanOutputAlias aliasInfer = new
InferPlanOutputAlias(childOutput);
+ List<NamedExpression> output =
aliasInfer.infer(fileSink.child(),
+ exprIdToIndexMapBuilder.build());
+ return fileSink.withOutputExprs(output);
+ })
),
// TODO: bind hive taget table
RuleType.BINDING_INSERT_HIVE_TABLE.build(unboundHiveTableSink().thenApply(this::bindHiveTableSink))
diff --git
a/regression-test/data/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.out
b/regression-test/data/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.out
index b5c2217e48a..e168da81791 100644
---
a/regression-test/data/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.out
+++
b/regression-test/data/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.out
@@ -36,7 +36,7 @@ false
false
-- !desc_s3 --
-__binary_predicate_0 BOOLEAN Yes false \N NONE
+__greater_than_0 BOOLEAN Yes false \N NONE
-- !select_base1 --
10
@@ -72,7 +72,7 @@ __max_0 INT Yes false \N NONE
9 id not exist
-- !desc_s3 --
-__case_expr_1 TEXT Yes false \N NONE
+__case_when_1 TEXT Yes false \N NONE
id INT Yes false \N NONE
-- !select_base1 --
@@ -100,10 +100,10 @@ id INT Yes false \N NONE
9 1 string 27 false 5 true 1
-- !desc_s3 --
-__arithmetic_expr_5 INT Yes false \N NONE
-__arithmetic_expr_7 BIGINT Yes false \N NONE
-__binary_predicate_4 BOOLEAN Yes false \N NONE
-__cast_expr_3 BIGINT Yes false \N NONE
+__add_5 INT Yes false \N NONE
+__bit_or_7 INT Yes false \N NONE
+__cast_3 BIGINT Yes false \N NONE
+__greater_than_4 BOOLEAN Yes false \N NONE
__in_predicate_6 BOOLEAN Yes false \N NONE
__literal_1 INT Yes false \N NONE
__literal_2 TEXT Yes false \N NONE
@@ -134,9 +134,9 @@ id INT Yes false \N NONE
2566 888 9999
-- !desc_s3 --
-__cast_expr_0 TEXT Yes false \N NONE
-__cast_expr_1 BIGINT Yes false \N NONE
-__cast_expr_2 TEXT Yes false \N NONE
+__cast_0 TEXT Yes false \N NONE
+__cast_1 BIGINT Yes false \N NONE
+__cast_2 TEXT Yes false \N NONE
-- !select_base1 --
false
@@ -163,7 +163,7 @@ false
false
-- !desc_s3 --
-__binary_predicate_0 BOOLEAN Yes false \N NONE
+__greater_than_0 BOOLEAN Yes false \N NONE
-- !select_base1 --
10
@@ -199,7 +199,7 @@ __max_0 INT Yes false \N NONE
9 id not exist
-- !desc_s3 --
-__case_expr_1 VARCHAR(65533) Yes false \N NONE
+__case_when_1 TEXT Yes false \N NONE
id INT Yes false \N NONE
-- !select_base1 --
@@ -227,13 +227,13 @@ id INT Yes false \N NONE
9 1 string 27 false 5 true 1
-- !desc_s3 --
-__arithmetic_expr_5 SMALLINT Yes false \N NONE
-__arithmetic_expr_7 BIGINT Yes false \N NONE
-__binary_predicate_4 BOOLEAN Yes false \N NONE
-__cast_expr_3 BIGINT Yes false \N NONE
+__add_5 SMALLINT Yes false \N NONE
+__bit_or_7 TINYINT Yes false \N NONE
+__cast_3 BIGINT Yes false \N NONE
+__greater_than_4 BOOLEAN Yes false \N NONE
__in_predicate_6 BOOLEAN Yes false \N NONE
__literal_1 TINYINT Yes false \N NONE
-__literal_2 VARCHAR(65533) Yes false \N NONE
+__literal_2 VARCHAR(6) Yes false \N NONE
id INT Yes false \N NONE
-- !select_base1 --
@@ -261,7 +261,7 @@ id INT Yes false \N NONE
2566 888 9999
-- !desc_s3 --
-__cast_expr_0 TEXT Yes false \N NONE
-__cast_expr_1 BIGINT Yes false \N NONE
-__cast_expr_2 TEXT Yes false \N NONE
+__cast_0 TEXT Yes false \N NONE
+__cast_1 BIGINT Yes false \N NONE
+__cast_2 TEXT Yes false \N NONE
diff --git
a/regression-test/suites/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.groovy
b/regression-test/suites/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.groovy
index 52e5f2088c3..1d3d8df2ba8 100644
---
a/regression-test/suites/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.groovy
+++
b/regression-test/suites/export_p0/outfile/outfile_expr/test_outfile_expr_generate_col_name.groovy
@@ -22,9 +22,6 @@ import java.nio.file.Files
import java.nio.file.Paths
suite("test_outfile_expr_generate_col_name", "p0") {
- // close nereids
- sql """ set enable_nereids_planner=false """
-
String ak = getS3AK()
String sk = getS3SK()
String s3_endpoint = getS3Endpoint()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]