[ https://issues.apache.org/jira/browse/CALCITE-5314?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jess Balint closed CALCITE-5314. -------------------------------- Resolved in release 1.33.0 (2023-02-06) > Prune empty parts of a query by exploiting stats/metadata > --------------------------------------------------------- > > Key: CALCITE-5314 > URL: https://issues.apache.org/jira/browse/CALCITE-5314 > Project: Calcite > Issue Type: Improvement > Components: core > Reporter: Stamatis Zampetakis > Assignee: Hanumath Rao Maduri > Priority: Major > Labels: pull-request-available > Fix For: 1.33.0 > > Time Spent: 2h 10m > Remaining Estimate: 0h > > Currently there is a collection of rules (i.e., > [PruneEmptyRules|https://github.com/apache/calcite/blob/4ef9ffe0d4afb80fe95e66d4d9c9e6f5939f70a8/core/src/main/java/org/apache/calcite/rel/rules/PruneEmptyRules.java]) > which remove sections of a query plan when it does not produce any rows. > At the moment, the removal requires an empty {{Values}} operator to be in the > plan in order to take effect. However, there are cases where queries involve > empty relations/tables and in that case we could remove parts of the plan as > well. > The information if a relation is empty or not can be derived from metadata. > For example, we could check if the > [RelMdMaxRowCount|https://github.com/apache/calcite/blob/4ef9ffe0d4afb80fe95e66d4d9c9e6f5939f70a8/core/src/main/java/org/apache/calcite/rel/metadata/RelMdMaxRowCount.java] > returns zero to derive that the relation is empty. > Implementation wise there are various alternatives to consider: > * modify the existing PruneEmptyRule to consider metadata; > * add new pruning rules relying exclusively on metadata; > * add new rules checking metadata and turning the empty relation to an empty > {{Values}} which can then be handled by existing rules -- This message was sent by Atlassian Jira (v8.20.10#820010)