Darpan Lunagariya (e6data computing) created CALCITE-7737:
-------------------------------------------------------------
Summary: Predicate rewriting using function preimages
Key: CALCITE-7737
URL: https://issues.apache.org/jira/browse/CALCITE-7737
Project: Calcite
Issue Type: Improvement
Components: core
Reporter: Darpan Lunagariya (e6data computing)
{code}
h2. Description
Add support for rewriting predicates on function results into equivalent
predicates on their input columns using function preimages.
For a function {{f}} and result domain {{D}}, the preimage is:
{code:none}
preimage(f, D) = {x | f(x) belongs to D}
{code}
Therefore:
{code:none}
SEARCH(f(column), D) <=> SEARCH(column, preimage(f, D))
{code}
The rewrite is applied only when exact equivalence can be established.
h2. Example
The {{YEAR}} function is monotonic over a date-time input: as the input
increases, the extracted year never decreases.
{code:sql}
YEAR(event_time) = 2020
{code}
The exact preimage of {{2020}} is the corresponding timestamp interval:
{code:sql}
event_time >= TIMESTAMP '2020-01-01 00:00:00'
AND event_time < TIMESTAMP '2021-01-01 00:00:00'
{code}
The function predicate can therefore be replaced with the base-column range.
h2. Initial scope
The initial generic implementation focuses on monotonic functions. For a
monotonic function, the preimage of an ordered result range can be represented
using straightforward input boundaries. These boundaries can be derived using a
symbolic inverse or bisection.
Non-monotonic functions may produce multiple disjoint input ranges and usually
require function-specific reasoning. They are not impossible to support, but
are outside the initial generic scope.
h2. Benefits
Enables file, row-group and page pruning using min/max statistics.
Avoids evaluating the function for every row when the original predicate is
replaced with its exact preimage.
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)