diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java index cd7fb92..3938dab 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/SelectOperator.java @@ -195,4 +195,23 @@ public boolean isIdentitySelect() { return true; } + // if it reaches here, it means the SEL is going to be removed. + public void updateParentsTableAliasIfPossible() { + RowSchema orig = this.getSchema(); + RowSchema dest = this.getParentOperators().get(0).getSchema(); + if (orig.getSignature() == null) { + return; + } + for (int i = 0; i < orig.getSignature().size(); i++) { + ColumnInfo origColumn = orig.getSignature().get(i); + ColumnInfo destColumn = dest.getSignature().get(i); + // if the tabAlias are different, make them the same for collecting + // correct statistics. + if (origColumn != null && destColumn != null) { + destColumn.setTabAlias(origColumn.getTabAlias()); + destColumn.setAlias(origColumn.getAlias()); + } + } + } + } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/IdentityProjectRemover.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/IdentityProjectRemover.java index 433699b..5343585 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/IdentityProjectRemover.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/IdentityProjectRemover.java @@ -100,6 +100,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, return null; } if(sel.isIdentitySelect()) { + sel.updateParentsTableAliasIfPossible(); parent.removeChildAndAdoptItsChildren(sel); LOG.debug("Identity project remover optimization removed : " + sel); }