This is an automated email from the ASF dual-hosted git repository.
luoc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
The following commit(s) were added to refs/heads/master by this push:
new 2e96919 DRILL-7893: Column alias is not working for a parquet file
2e96919 is described below
commit 2e96919142e0ff44b64a386d38b1244e80498e8f
Author: Volodymyr Vysotskyi <[email protected]>
AuthorDate: Wed Apr 28 21:50:08 2021 +0300
DRILL-7893: Column alias is not working for a parquet file
---
.../physical/visitor/ComplexToJsonPrelVisitor.java | 3 +--
.../physical/visitor/ExcessiveExchangeIdentifier.java | 15 +++++++++++++--
.../planner/physical/visitor/FinalColumnReorderer.java | 17 +++++++++++------
.../physical/visitor/InsertLocalExchangeVisitor.java | 3 +++
.../physical/visitor/LateralUnnestRowIDVisitor.java | 4 +++-
.../physical/visitor/RewriteProjectToFlatten.java | 13 +++++++++----
.../planner/physical/visitor/RuntimeFilterVisitor.java | 11 +++++++----
.../physical/visitor/SelectionVectorPrelVisitor.java | 5 ++++-
.../physical/visitor/SplitUpComplexExpressions.java | 3 +++
.../exec/planner/sql/handlers/DefaultSqlHandler.java | 10 ++++++++--
.../exec/store/parquet/TestParquetFilterPushDown.java | 13 +++++++++++++
11 files changed, 75 insertions(+), 22 deletions(-)
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ComplexToJsonPrelVisitor.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ComplexToJsonPrelVisitor.java
index eb59611..8186351 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ComplexToJsonPrelVisitor.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ComplexToJsonPrelVisitor.java
@@ -22,7 +22,6 @@ import java.util.Collections;
import org.apache.drill.exec.planner.physical.ComplexToJsonPrel;
import org.apache.drill.exec.planner.physical.Prel;
import org.apache.drill.exec.planner.physical.ScreenPrel;
-import org.apache.calcite.rel.RelNode;
public class ComplexToJsonPrelVisitor extends BasePrelVisitor<Prel, Void,
RuntimeException> {
@@ -34,7 +33,7 @@ public class ComplexToJsonPrelVisitor extends
BasePrelVisitor<Prel, Void, Runtim
@Override
public Prel visitScreen(ScreenPrel prel, Void value) throws RuntimeException
{
- return prel.copy(prel.getTraitSet(),
Collections.singletonList((RelNode)new
ComplexToJsonPrel((Prel)prel.getInput())));
+ return prel.copy(prel.getTraitSet(), Collections.singletonList(new
ComplexToJsonPrel((Prel) prel.getInput())));
}
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
index 3660868..18a34b7 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/ExcessiveExchangeIdentifier.java
@@ -43,7 +43,7 @@ public class ExcessiveExchangeIdentifier extends
BasePrelVisitor<Prel, Excessive
this.targetSliceSize = targetSliceSize;
}
- public static Prel removeExcessiveEchanges(Prel prel, long targetSliceSize) {
+ public static Prel removeExcessiveExchanges(Prel prel, long targetSliceSize)
{
ExcessiveExchangeIdentifier exchange = new
ExcessiveExchangeIdentifier(targetSliceSize);
return prel.accept(exchange, exchange.getNewStat());
}
@@ -67,8 +67,10 @@ public class ExcessiveExchangeIdentifier extends
BasePrelVisitor<Prel, Excessive
if (canRemoveExchange(parent, newFrag)) {
return newChild;
+ } else if (newChild != prel.getInput()) {
+ return (Prel) prel.copy(prel.getTraitSet(),
Collections.singletonList(newChild));
} else {
- return (Prel) prel.copy(prel.getTraitSet(),
Collections.singletonList((RelNode) newChild));
+ return prel;
}
}
@@ -85,6 +87,9 @@ public class ExcessiveExchangeIdentifier extends
BasePrelVisitor<Prel, Excessive
public Prel visitScreen(ScreenPrel prel, MajorFragmentStat s) throws
RuntimeException {
s.addScreen(prel);
RelNode child = ((Prel) prel.getInput()).accept(this, s);
+ if (child == prel.getInput()) {
+ return prel;
+ }
return prel.copy(prel.getTraitSet(), Collections.singletonList(child));
}
@@ -119,6 +124,9 @@ public class ExcessiveExchangeIdentifier extends
BasePrelVisitor<Prel, Excessive
topMostLateralJoin = null;
s.setRightSideOfLateral(false);
}
+ if (children.equals(prel.getInputs())) {
+ return prel;
+ }
return (Prel) prel.copy(prel.getTraitSet(), children);
}
@@ -146,6 +154,9 @@ public class ExcessiveExchangeIdentifier extends
BasePrelVisitor<Prel, Excessive
for (Prel p : prel) {
children.add(p.accept(this, s));
}
+ if (children.equals(prel.getInputs())) {
+ return prel;
+ }
return (Prel) prel.copy(prel.getTraitSet(), children);
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/FinalColumnReorderer.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/FinalColumnReorderer.java
index b04ae43..144b62c 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/FinalColumnReorderer.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/FinalColumnReorderer.java
@@ -32,10 +32,9 @@ import org.apache.calcite.rex.RexNode;
import org.apache.drill.shaded.guava.com.google.common.collect.Lists;
-public class FinalColumnReorderer extends BasePrelVisitor<Prel, Void,
RuntimeException>{
- static final org.slf4j.Logger logger =
org.slf4j.LoggerFactory.getLogger(FinalColumnReorderer.class);
+public class FinalColumnReorderer extends BasePrelVisitor<Prel, Void,
RuntimeException> {
- private static FinalColumnReorderer INSTANCE = new FinalColumnReorderer();
+ private static final FinalColumnReorderer INSTANCE = new
FinalColumnReorderer();
public static Prel addFinalColumnOrdering(Prel prel) {
return prel.accept(INSTANCE, null);
@@ -43,8 +42,11 @@ public class FinalColumnReorderer extends
BasePrelVisitor<Prel, Void, RuntimeExc
@Override
public Prel visitScreen(ScreenPrel prel, Void value) throws RuntimeException
{
- Prel newChild = ((Prel) prel.getInput()).accept(this, value);
- return prel.copy(prel.getTraitSet(), Collections.singletonList( (RelNode)
addTrivialOrderedProjectPrel(newChild, true)));
+ Prel newChild = addTrivialOrderedProjectPrel(((Prel)
prel.getInput()).accept(this, value), true);
+ if (newChild == prel.getInput()) {
+ return prel;
+ }
+ return prel.copy(prel.getTraitSet(), Collections.singletonList(newChild));
}
private Prel addTrivialOrderedProjectPrel(Prel prel) {
@@ -76,7 +78,10 @@ public class FinalColumnReorderer extends
BasePrelVisitor<Prel, Void, RuntimeExc
@Override
public Prel visitWriter(WriterPrel prel, Void value) throws RuntimeException
{
Prel newChild = ((Prel) prel.getInput()).accept(this, null);
- return prel.copy(prel.getTraitSet(), Collections.singletonList( (RelNode)
addTrivialOrderedProjectPrel(newChild, true)));
+ if (newChild == prel.getInput()) {
+ return prel;
+ }
+ return prel.copy(prel.getTraitSet(),
Collections.singletonList(addTrivialOrderedProjectPrel(newChild, true)));
}
@Override
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/InsertLocalExchangeVisitor.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/InsertLocalExchangeVisitor.java
index fd15cc7..899417c 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/InsertLocalExchangeVisitor.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/InsertLocalExchangeVisitor.java
@@ -60,6 +60,9 @@ public class InsertLocalExchangeVisitor extends
BasePrelVisitor<Prel, Void, Runt
for(Prel child : prel){
children.add(child.accept(this, null));
}
+ if (children.equals(prel.getInputs())) {
+ return prel;
+ }
return (Prel) prel.copy(prel.getTraitSet(), children);
}
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/LateralUnnestRowIDVisitor.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/LateralUnnestRowIDVisitor.java
index 2eb4405..3cb4093 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/LateralUnnestRowIDVisitor.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/LateralUnnestRowIDVisitor.java
@@ -40,7 +40,7 @@ import java.util.Map;
*/
public class LateralUnnestRowIDVisitor extends BasePrelVisitor<Prel, Boolean,
RuntimeException> {
- private static LateralUnnestRowIDVisitor INSTANCE = new
LateralUnnestRowIDVisitor();
+ private static final LateralUnnestRowIDVisitor INSTANCE = new
LateralUnnestRowIDVisitor();
public static Prel insertRowID(Prel prel){
return prel.accept(INSTANCE, false);
@@ -51,6 +51,8 @@ public class LateralUnnestRowIDVisitor extends
BasePrelVisitor<Prel, Boolean, Ru
List<RelNode> children = getChildren(prel, isRightOfLateral);
if (isRightOfLateral) {
return prel.prepareForLateralUnnestPipeline(children);
+ } else if (children.equals(prel.getInputs())) {
+ return prel;
} else {
return (Prel) prel.copy(prel.getTraitSet(), children);
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java
index f21929b..a1ffe2e 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RewriteProjectToFlatten.java
@@ -55,13 +55,15 @@ public class RewriteProjectToFlatten extends
BasePrelVisitor<Prel, Object, RelCo
child = child.accept(this, null);
children.add(child);
}
+ if (children.equals(prel.getInputs())) {
+ return prel;
+ }
return (Prel) prel.copy(prel.getTraitSet(), children);
}
@Override
- public Prel visitProject(ProjectPrel node, Object unused) throws
RelConversionException {
- ProjectPrel project = node;
+ public Prel visitProject(ProjectPrel project, Object unused) throws
RelConversionException {
List<RexNode> exprList = new ArrayList<>();
boolean rewrite = false;
@@ -88,15 +90,18 @@ public class RewriteProjectToFlatten extends
BasePrelVisitor<Prel, Object, RelCo
i++;
exprList.add(newExpr);
}
- if (rewrite == true) {
+ if (rewrite) {
// TODO - figure out what is the right setting for the traits
Prel newChild = ((Prel)project.getInput(0)).accept(this, null);
- ProjectPrel newProject = new ProjectPrel(node.getCluster(),
project.getTraitSet(), newChild, exprList, new RelRecordType(relDataTypes));
+ ProjectPrel newProject = new ProjectPrel(project.getCluster(),
project.getTraitSet(), newChild, exprList, new RelRecordType(relDataTypes));
FlattenPrel flatten = new FlattenPrel(project.getCluster(),
project.getTraitSet(), newProject, flatttenExpr);
return flatten;
}
Prel child = ((Prel)project.getInput()).accept(this, null);
+ if (child == project.getInput() &&
exprList.equals(project.getChildExps())) {
+ return project;
+ }
return (Prel) project.copy(project.getTraitSet(), child, exprList, new
RelRecordType(relDataTypes));
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RuntimeFilterVisitor.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RuntimeFilterVisitor.java
index acc5977..427044d 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RuntimeFilterVisitor.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/RuntimeFilterVisitor.java
@@ -57,13 +57,13 @@ import java.util.concurrent.atomic.AtomicLong;
*/
public class RuntimeFilterVisitor extends BasePrelVisitor<Prel, Void,
RuntimeException> {
- private Set<ScanPrel> toAddRuntimeFilter = new HashSet<>();
+ private final Set<ScanPrel> toAddRuntimeFilter = new HashSet<>();
- private Multimap<ScanPrel, HashJoinPrel> probeSideScan2hj =
HashMultimap.create();
+ private final Multimap<ScanPrel, HashJoinPrel> probeSideScan2hj =
HashMultimap.create();
- private double fpp;
+ private final double fpp;
- private int bloomFilterMaxSizeInBytesDef;
+ private final int bloomFilterMaxSizeInBytesDef;
private static final AtomicLong rfIdCounter = new AtomicLong();
@@ -87,6 +87,9 @@ public class RuntimeFilterVisitor extends
BasePrelVisitor<Prel, Void, RuntimeExc
child = child.accept(this, value);
children.add(child);
}
+ if (children.equals(prel.getInputs())) {
+ return prel;
+ }
return (Prel) prel.copy(prel.getTraitSet(), children);
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SelectionVectorPrelVisitor.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SelectionVectorPrelVisitor.java
index 62b38d5..d56d3d7 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SelectionVectorPrelVisitor.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SelectionVectorPrelVisitor.java
@@ -29,7 +29,7 @@ import
org.apache.drill.shaded.guava.com.google.common.collect.Lists;
public class SelectionVectorPrelVisitor extends BasePrelVisitor<Prel, Void,
RuntimeException>{
- private static SelectionVectorPrelVisitor INSTANCE = new
SelectionVectorPrelVisitor();
+ private static final SelectionVectorPrelVisitor INSTANCE = new
SelectionVectorPrelVisitor();
public static Prel addSelectionRemoversWhereNecessary(Prel prel) {
return prel.accept(INSTANCE, null);
@@ -44,6 +44,9 @@ public class SelectionVectorPrelVisitor extends
BasePrelVisitor<Prel, Void, Runt
children.add(convert(encodings, child));
}
+ if (children.equals(prel.getInputs())) {
+ return prel;
+ }
return (Prel) prel.copy(prel.getTraitSet(), children);
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java
index 1f46e46..7bbd55b 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/visitor/SplitUpComplexExpressions.java
@@ -62,6 +62,9 @@ public class SplitUpComplexExpressions extends
BasePrelVisitor<Prel, Object, Rel
child = child.accept(this, unused);
children.add(child);
}
+ if (children.equals(prel.getInputs())) {
+ return prel;
+ }
return (Prel) prel.copy(prel.getTraitSet(), children);
}
diff --git
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
index 2a8e272..baa77b8 100644
---
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
+++
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
@@ -544,7 +544,7 @@ public class DefaultSqlHandler extends AbstractSqlHandler {
* If two fragments are both estimated to be parallelization one, remove
the exchange
* separating them.
*/
- phyRelNode =
ExcessiveExchangeIdentifier.removeExcessiveEchanges(phyRelNode,
targetSliceSize);
+ phyRelNode =
ExcessiveExchangeIdentifier.removeExcessiveExchanges(phyRelNode,
targetSliceSize);
/* Insert the IMPLICIT_COLUMN in the lateral unnest pipeline */
phyRelNode = LateralUnnestRowIDVisitor.insertRowID(phyRelNode);
@@ -589,7 +589,13 @@ public class DefaultSqlHandler extends AbstractSqlHandler {
*/
phyRelNode =
SelectionVectorPrelVisitor.addSelectionRemoversWhereNecessary(phyRelNode);
- /* 10.)
+ /*
+ * 10.)
+ * Insert project above the screen operator or writer to ensure that final
output column names are preserved after all optimizations.
+ */
+ phyRelNode = TopProjectVisitor.insertTopProject(phyRelNode,
validatedRowType);
+
+ /* 11.)
* Finally, Make sure that the no rels are repeats.
* This could happen in the case of querying the same table twice as Optiq
may canonicalize these.
*/
diff --git
a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java
b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java
index bf57128..6ab7bbe 100644
---
a/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java
+++
b/exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetFilterPushDown.java
@@ -704,6 +704,19 @@ public class TestParquetFilterPushDown extends
PlanTestBase {
testParquetFilterPruning(query, 25, 1, new String[]{"Filter\\("});
}
+ @Test
+ public void testPreservingColumnAliasAfterRemovingFilter() throws Exception {
+ test("create table dfs.tmp.`testAliasTable` as select * from
cp.`tpch/nation.parquet` limit 1");
+ String query = "select n_regionkey as x from dfs.tmp.`testAliasTable`
where n_nationkey > -100500";
+
+ testBuilder()
+ .sqlQuery(query)
+ .unOrdered()
+ .baselineColumns("x")
+ .baselineValues(0)
+ .go();
+ }
+
//////////////////////////////////////////////////////////////////////////////////////////////////
// Some test helper functions.
//////////////////////////////////////////////////////////////////////////////////////////////////