kasakrisz opened a new pull request, #3588:
URL: https://github.com/apache/hive/pull/3588
<!--
Thanks for sending a pull request! Here are some tips for you:
1. If this is your first time, please read our contributor guidelines:
https://cwiki.apache.org/confluence/display/Hive/HowToContribute
2. Ensure that you have created an issue on the Hive project JIRA:
https://issues.apache.org/jira/projects/HIVE/summary
3. Ensure you have added or run the appropriate tests for your PR:
4. If the PR is unfinished, add '[WIP]' in your PR title, e.g.,
'[WIP]HIVE-XXXXX: Your PR title ...'.
5. Be sure to keep the PR description updated to reflect all changes.
6. Please write your PR title to summarize what this PR proposes.
7. If possible, provide a concise example to reproduce the issue for a
faster review.
-->
### What changes were proposed in this pull request?
* Currently Hive represents the empty result operator with
`HiveSortLimit(fetch=0)`. Change this to `HiveValues(tuples[])` like Calcite
does.
* Improve and extend the `PruneEmptyRules` provided by Calcite with Hive
specific functionality.
* Represent the empty `HiveValues` operator with an AST tree of the query
```
select null as colName0... null as colNamen limit 0
```
when converting back the CBO plan to AST.
* Get the schema information from the `HiveValues` row type at CBO -> AST
conversion.
### Why are the changes needed?
* Calcite has built in rules to remove sections of a query plan known never
produces any rows. It makes the CBO plan much simpler.
* In some cases (ex. `select * from table1 where 1=0` ) the whole plan can
be removed and Hive already has an optimization not to execute queries which
does not provide any result. This optimization is built on checking the limit
value at the top level query.
### Does this PR introduce _any_ user-facing change?
No, but `explain` results.
### How was this patch tested?
```
mvn test -Dtest.output.overwrite -Dtest=TestMiniLlapLocalCliDriver
-Dqfile=empty_result_outerjoin.q,empty_result.q,empty_result_union.q -pl
itests/qtest -Pitests
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]