You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2016/05/10 21:53:13 UTC

[jira] [Created] (CALCITE-1234) Annotate table functions to allow pushing down project, filter

Julian Hyde created CALCITE-1234:
------------------------------------

             Summary: Annotate table functions to allow pushing down project, filter
                 Key: CALCITE-1234
                 URL: https://issues.apache.org/jira/browse/CALCITE-1234
             Project: Calcite
          Issue Type: Bug
            Reporter: Julian Hyde
            Assignee: Julian Hyde


In general it is not possible to push relational operators through table functions but many table functions have properties that will allow push down: for instance, they might preserve fields, preserve row count, return rows in the same order. If we annotate a table function with these properties, we can automatically push down a Filter, and so forth.

Some ideas:
* {{PreservesFieldNames}}: If an output field has the same name as an input field, it is assumed to be the same field.
* {{PreservesRows}}: Each input row causes exactly one output row, in the same order.
* {{FiltersRows}}: Each input row causes at most one output row, in the same order.
* {{PreservesFieldPositions}}: The leading N columns of the output are equivalent to the leading N columns of the input.

If {{(PreservesFieldNames or PreservesFieldPositions) and (PreservesRows or FiltersRows)}}, it is safe to push down a Filter if all of the fields of the predicate exist in the input.

Similarly pushing down a Project; and we can push down an Aggregate if {{PreservesRows}}.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)