You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2018/01/28 00:59:00 UTC
[jira] [Resolved] (CALCITE-2091) Improve DruidQuery cost function,
to ensure that EXTRACT gets pushed as an interval if possible
[ https://issues.apache.org/jira/browse/CALCITE-2091?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Julian Hyde resolved CALCITE-2091.
----------------------------------
Resolution: Fixed
Fix Version/s: 1.16.0
Fixed in [5c2164da|http://git-wip-us.apache.org/repos/asf/calcite/commit/5c2164da].
> Improve DruidQuery cost function, to ensure that EXTRACT gets pushed as an interval if possible
> -----------------------------------------------------------------------------------------------
>
> Key: CALCITE-2091
> URL: https://issues.apache.org/jira/browse/CALCITE-2091
> Project: Calcite
> Issue Type: Improvement
> Components: druid
> Reporter: Nishant Bangarwa
> Assignee: Nishant Bangarwa
> Priority: Major
> Fix For: 1.16.0
>
>
> DruidAdapterIT testFilterTimestamp does not test translating of extract fn to interval.
> This test was added to verify that the extract function is transformed to a date range on timestamp column. But in this it does not seem to be pushing extract to interval. This task is to check the root cause and fix this. I guess this is possibly an issue with cost computation not accounting for interval being queried.
> {code}
> /** Tests that conditions applied to time units extracted via the EXTRACT
> * function become ranges on the timestamp column
> *
> * <p>Test case for
> * <a href="https://issues.apache.org/jira/browse/CALCITE-1334">[CALCITE-1334]
> * Convert predicates on EXTRACT function calls into date ranges</a>. */
> @Test public void testFilterTimestamp() {
> String sql = "select count(*) as c\n"
> + "from \"foodmart\"\n"
> + "where extract(year from \"timestamp\") = 1997\n"
> + "and extract(month from \"timestamp\") in (4, 6)\n";
> final String explain = "DruidQuery(table=[[foodmart, foodmart]], "
> + "intervals=[[1900-01-09T00:00:00.000Z/2992-01-10T00:00:00.000Z]], "
> + "filter=[AND(=(EXTRACT(FLAG(YEAR), $0), 1997), OR(=(EXTRACT(FLAG(MONTH), $0), 4), "
> + "=(EXTRACT(FLAG(MONTH), $0), 6)))], groups=[{}], aggs=[[COUNT()]])";
> sql(sql)
> .explainContains(explain)
> .returnsUnordered("C=13500");
> }
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)