This is an automated email from the ASF dual-hosted git repository.
joemcdonnell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
The following commit(s) were added to refs/heads/master by this push:
new e9d7c152d IMPALA-13582: Calcite planner: return proper labels for
columns
e9d7c152d is described below
commit e9d7c152dccfe801af57f3d0a82f54ecdb49bc64
Author: Steve Carlin <[email protected]>
AuthorDate: Tue Nov 19 14:31:46 2024 -0800
IMPALA-13582: Calcite planner: return proper labels for columns
The field names were not getting passed up to the output expressions.
These are found on the RelNode row type object.
The change is made in two different flows:
The first flow is in CalciteSingleNodePlanner which gets hit when
running from impala-shell and the use_calcite_planner query option
is used.
The second flow is in ExecRequestCreator and gets hit when running
with the start-up option that loads a different JniFrontend jar. This
mode will soon be deprecated, but is still used for testing purposes.
Change-Id: I42818646d98f87d8744585010fc166f9d416aec1
Reviewed-on: http://gerrit.cloudera.org:8080/22117
Tested-by: Impala Public Jenkins <[email protected]>
Reviewed-by: Joe McDonnell <[email protected]>
---
.../org/apache/impala/calcite/rel/node/ImpalaAggRel.java | 5 +++--
.../apache/impala/calcite/rel/node/ImpalaAnalyticRel.java | 3 ++-
.../apache/impala/calcite/rel/node/ImpalaHdfsScanRel.java | 3 ++-
.../org/apache/impala/calcite/rel/node/ImpalaJoinRel.java | 2 +-
.../apache/impala/calcite/rel/node/ImpalaProjectRel.java | 2 +-
.../org/apache/impala/calcite/rel/node/ImpalaSortRel.java | 3 ++-
.../apache/impala/calcite/rel/node/ImpalaValuesRel.java | 2 +-
.../apache/impala/calcite/rel/node/NodeCreationUtils.java | 4 ++--
.../org/apache/impala/calcite/rel/node/NodeWithExprs.java | 12 ++++++++----
.../impala/calcite/service/CalciteSingleNodePlanner.java | 9 ++-------
.../apache/impala/calcite/service/ExecRequestCreator.java | 14 +++++++++-----
11 files changed, 33 insertions(+), 26 deletions(-)
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAggRel.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAggRel.java
index c610351c9..8d48b0ed2 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAggRel.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAggRel.java
@@ -147,7 +147,7 @@ public class ImpalaAggRel extends Aggregate
aggNode.init(simplifiedAnalyzer);
simplifiedAnalyzer.clearUnassignedConjuncts();
- return new NodeWithExprs(aggNode, outputExprs);
+ return new NodeWithExprs(aggNode, outputExprs,
getRowType().getFieldNames());
}
private NodeWithExprs getChildPlanNode(ParentPlanRelContext context
@@ -379,7 +379,8 @@ public class ImpalaAggRel extends Aggregate
cardinalityCheckNode.init(ctx.getRootAnalyzer());
- return new NodeWithExprs(cardinalityCheckNode, outputExprs);
+ return new NodeWithExprs(cardinalityCheckNode, outputExprs,
+ getRowType().getFieldNames());
}
public Aggregate copy(RelTraitSet relTraitSet, RelNode relNode,
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAnalyticRel.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAnalyticRel.java
index f39b69ad6..1f26988a5 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAnalyticRel.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaAnalyticRel.java
@@ -165,7 +165,8 @@ public class ImpalaAnalyticRel extends Project
List<Expr> outputExprs =
getOutputExprs(mapping, projects, context.ctx_.getRootAnalyzer());
- NodeWithExprs retNode = new NodeWithExprs(planNode, outputExprs);
+ NodeWithExprs retNode =
+ new NodeWithExprs(planNode, outputExprs, getRowType().getFieldNames());
// If there is a filter condition, a SelectNode will get added on top
// of the retNode.
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaHdfsScanRel.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaHdfsScanRel.java
index e4ea19686..eaa2532c9 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaHdfsScanRel.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaHdfsScanRel.java
@@ -123,7 +123,8 @@ public class ImpalaHdfsScanRel extends TableScan
physicalNode.setOutputSmap(new ExprSubstitutionMap());
physicalNode.init(analyzer);
- return new NodeWithExprs(physicalNode, outputExprs,
countStarOptimizationExpr);
+ return new NodeWithExprs(physicalNode, outputExprs,
+ getRowType().getFieldNames(), countStarOptimizationExpr);
}
/**
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
index 4d32de0ea..0fa95c1b2 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaJoinRel.java
@@ -153,7 +153,7 @@ public class ImpalaJoinRel extends Join
analyzer.registerConjuncts(getJoinConjunctListToRegister(equiJoinExprs));
}
- return new NodeWithExprs(joinNode, outputExprs);
+ return new NodeWithExprs(joinNode, outputExprs,
getRowType().getFieldNames());
}
private NodeWithExprs getChildPlanNode(RelNode relInput,
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaProjectRel.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaProjectRel.java
index 3abc1101f..e01e36bab 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaProjectRel.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaProjectRel.java
@@ -92,7 +92,7 @@ public class ImpalaProjectRel extends Project
// There is no Impala Plan Node mapped to Project, so we just return the
child
// PlanNode. However, the outputExprs change with the Project.
return new NodeWithExprs(inputWithExprs.planNode_, outputExprs,
- inputWithExprs.countStarOptimization_);
+ getRowType().getFieldNames(), inputWithExprs.countStarOptimization_);
}
/**
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaSortRel.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaSortRel.java
index ce6f0939e..a50bef18c 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaSortRel.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaSortRel.java
@@ -143,7 +143,8 @@ public class ImpalaSortRel extends Sort
inputNodeWithExprs.planNode_, sortInfo, limit_, offset_, limit_ != -1,
context.ctx_.getRootAnalyzer());
- NodeWithExprs retNode = new NodeWithExprs(sortNode, outputExprs);
+ NodeWithExprs retNode =
+ new NodeWithExprs(sortNode, outputExprs, getRowType().getFieldNames());
// If there is a filter condition, a SelectNode will get added on top
// of the retNode.
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaValuesRel.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaValuesRel.java
index cd9f8afa4..ba9159b96 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaValuesRel.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/ImpalaValuesRel.java
@@ -121,7 +121,7 @@ public class ImpalaValuesRel extends Values
i++;
}
- return new NodeWithExprs(retNode, outputExprs);
+ return new NodeWithExprs(retNode, outputExprs,
getRowType().getFieldNames());
}
private LiteralExpr getLiteralExprWithType(LiteralExpr expr, RelDataType
type,
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeCreationUtils.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeCreationUtils.java
index 8d6ebaf26..f82428d9b 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeCreationUtils.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeCreationUtils.java
@@ -70,7 +70,7 @@ public class NodeCreationUtils {
List<Expr> outputExprs = createOutputExprs(tupleDesc.getSlots());
- return new NodeWithExprs(emptySetNode, outputExprs);
+ return new NodeWithExprs(emptySetNode, outputExprs,
rowType.getFieldNames());
}
public static NodeWithExprs createUnionPlanNode(PlanNodeId nodeId,
@@ -87,7 +87,7 @@ public class NodeCreationUtils {
unionNode.init(analyzer);
- return new NodeWithExprs(unionNode, outputExprs);
+ return new NodeWithExprs(unionNode, outputExprs, rowType.getFieldNames());
}
public static List<Expr> createOutputExprs(List<SlotDescriptor> slotDescs) {
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeWithExprs.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeWithExprs.java
index 5247e7be0..4c634c244 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeWithExprs.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/rel/node/NodeWithExprs.java
@@ -31,20 +31,24 @@ import java.util.List;
public class NodeWithExprs {
public final PlanNode planNode_;
public final List<Expr> outputExprs_;
+ public final List<String> fieldNames_;
public final Expr countStarOptimization_;
- public NodeWithExprs(PlanNode planNode, List<Expr> outputExprs) {
- this(planNode, outputExprs, null);
+ public NodeWithExprs(PlanNode planNode, List<Expr> outputExprs,
+ List<String> fieldNames) {
+ this(planNode, outputExprs, fieldNames, null);
}
public NodeWithExprs(PlanNode planNode, NodeWithExprs childNodeWithExprs) {
- this(planNode, childNodeWithExprs.outputExprs_, null);
+ this(planNode, childNodeWithExprs.outputExprs_,
childNodeWithExprs.fieldNames_,
+ null);
}
public NodeWithExprs(PlanNode planNode, List<Expr> outputExprs,
- Expr countStarOptimization) {
+ List<String> fieldNames, Expr countStarOptimization) {
this.planNode_ = planNode;
this.outputExprs_ = outputExprs;
+ this.fieldNames_ = fieldNames;
this.countStarOptimization_ = countStarOptimization;
}
}
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteSingleNodePlanner.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteSingleNodePlanner.java
index a89c112f3..3a26dd457 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteSingleNodePlanner.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/CalciteSingleNodePlanner.java
@@ -88,12 +88,7 @@ public class CalciteSingleNodePlanner implements
SingleNodePlannerIntf {
@Override
public List<String> getColLabels() {
- List<String> colLabels = new ArrayList<>();
- int colCnt = rootNode_.outputExprs_.size();
- for (int i = 0; i < colCnt; ++i) {
- colLabels.add(rootNode_.outputExprs_.get(i).toString());
- }
- return colLabels;
+ return rootNode_.fieldNames_;
}
@Override
@@ -101,7 +96,7 @@ public class CalciteSingleNodePlanner implements
SingleNodePlannerIntf {
TResultSetMetadata metadata = new TResultSetMetadata();
int colCnt = rootNode_.outputExprs_.size();
for (int i = 0; i < colCnt; ++i) {
- TColumn colDesc = new TColumn(rootNode_.outputExprs_.get(i).toString(),
+ TColumn colDesc = new TColumn(rootNode_.fieldNames_.get(i).toLowerCase(),
rootNode_.outputExprs_.get(i).getType().toThrift());
metadata.addToColumns(colDesc);
}
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java
index 36cb3d9fc..ef299a649 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/service/ExecRequestCreator.java
@@ -106,6 +106,7 @@ public class ExecRequestCreator implements CompilerStep {
TExecRequest request = createExecRequest(nodeWithExprs.planNode_,
queryCtx.getTQueryCtx(), physPlanCreator.getPlannerContext(),
physPlanCreator.getAnalyzer(), nodeWithExprs.outputExprs_,
+ nodeWithExprs.fieldNames_,
mdHandler.getStmtTableCache().tables.values());
return request;
@@ -118,6 +119,7 @@ public class ExecRequestCreator implements CompilerStep {
*/
private TExecRequest createExecRequest(PlanNode planNodeRoot, TQueryCtx
queryCtx,
PlannerContext plannerContext, Analyzer analyzer, List<Expr> outputExprs,
+ List<String> fieldNames,
Collection<FeTable> tables) throws ImpalaException {
List<PlanFragment> fragments =
createPlans(planNodeRoot, analyzer, plannerContext, outputExprs);
@@ -125,7 +127,7 @@ public class ExecRequestCreator implements CompilerStep {
TQueryExecRequest queryExecRequest = new TQueryExecRequest();
TExecRequest result = createExecRequest(queryCtx, planFragmentRoot,
- queryExecRequest);
+ queryExecRequest, fieldNames);
queryExecRequest.setHost_list(getHostLocations(tables));
queryExecRequest.setCores_required(-1);
@@ -263,7 +265,8 @@ public class ExecRequestCreator implements CompilerStep {
}
private TExecRequest createExecRequest(TQueryCtx queryCtx,
- PlanFragment planFragmentRoot, TQueryExecRequest queryExecRequest) {
+ PlanFragment planFragmentRoot, TQueryExecRequest queryExecRequest,
+ List<String> fieldNames) {
TExecRequest result = new TExecRequest();
// NOTE: the below 4 are mandatory fields
result.setQuery_options(queryCtx.getClient_request().getQuery_options());
@@ -286,7 +289,7 @@ public class ExecRequestCreator implements CompilerStep {
List<Expr> outputExprs = new ArrayList<>();
planFragmentRoot.getSink().collectExprs(outputExprs);
- result.setResult_set_metadata(createQueryResultSetMetadata(outputExprs));
+ result.setResult_set_metadata(createQueryResultSetMetadata(outputExprs,
fieldNames));
return result;
}
@@ -311,11 +314,12 @@ public class ExecRequestCreator implements CompilerStep {
return sb.toString();
}
- private TResultSetMetadata createQueryResultSetMetadata(List<Expr>
outputExprs) {
+ private TResultSetMetadata createQueryResultSetMetadata(List<Expr>
outputExprs,
+ List<String> fieldNames) {
TResultSetMetadata metadata = new TResultSetMetadata();
int colCnt = outputExprs.size();
for (int i = 0; i < colCnt; ++i) {
- TColumn colDesc = new TColumn(outputExprs.get(i).toString(),
+ TColumn colDesc = new TColumn(fieldNames.get(i).toLowerCase(),
outputExprs.get(i).getType().toThrift());
metadata.addToColumns(colDesc);
}