aboutsummaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorHerman van Hovell <hvanhovell@databricks.com>2017-02-07 22:28:59 +0100
committerHerman van Hovell <hvanhovell@databricks.com>2017-02-07 22:28:59 +0100
commit73ee73945e369a862480ef4ac64e55c797bd7d90 (patch)
treede712e38633bacba3e3c5f94b9c51bcd4259ba90 /core
parentb7277e03d1038e2a19495c0ef7707e2d77937ccf (diff)
downloadspark-73ee73945e369a862480ef4ac64e55c797bd7d90.tar.gz
spark-73ee73945e369a862480ef4ac64e55c797bd7d90.tar.bz2
spark-73ee73945e369a862480ef4ac64e55c797bd7d90.zip
[SPARK-18609][SPARK-18841][SQL] Fix redundant Alias removal in the optimizer
## What changes were proposed in this pull request? The optimizer tries to remove redundant alias only projections from the query plan using the `RemoveAliasOnlyProject` rule. The current rule identifies removes such a project and rewrites the project's attributes in the **entire** tree. This causes problems when parts of the tree are duplicated (for instance a self join on a temporary view/CTE) and the duplicated part contains the alias only project, in this case the rewrite will break the tree. This PR fixes these problems by using a blacklist for attributes that are not to be moved, and by making sure that attribute remapping is only done for the parent tree, and not for unrelated parts of the query plan. The current tree transformation infrastructure works very well if the transformation at hand requires little or a global contextual information. In this case we need to know both the attributes that were not to be moved, and we also needed to know which child attributes were modified. This cannot be done easily using the current infrastructure, and solutions typically involves transversing the query plan multiple times (which is super slow). I have moved around some code in `TreeNode`, `QueryPlan` and `LogicalPlan`to make this much more straightforward; this basically allows you to manually traverse the tree. This PR subsumes the following PRs by windpiger: Closes https://github.com/apache/spark/pull/16267 Closes https://github.com/apache/spark/pull/16255 ## How was this patch tested? I have added unit tests to `RemoveRedundantAliasAndProjectSuite` and I have added integration tests to the `SQLQueryTestSuite.union` and `SQLQueryTestSuite.cte` test cases. Author: Herman van Hovell <hvanhovell@databricks.com> Closes #16757 from hvanhovell/SPARK-18609.
Diffstat (limited to 'core')
0 files changed, 0 insertions, 0 deletions