You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "zhen wang (JIRA)" <ji...@apache.org> on 2018/03/08 10:00:01 UTC

[jira] [Commented] (CALCITE-1862) StackOverflowException in RelMdUtil.estimateFilteredRows

    [ https://issues.apache.org/jira/browse/CALCITE-1862?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16391001#comment-16391001 ] 

zhen wang commented on CALCITE-1862:
------------------------------------

some findings
the estimate row count method it self is actually okay. before planner optimization it can derive the correct row count

the problem lies in the optimization, as rules gets applied on the relation algebra, the plan becomes deeper and deeper, when the stack overflow, the algebra has grown to a depth > 100 which essentially lead to the stack overflow. 

haven't located which rule is actually leading to the growth of the relation algebra. 


> StackOverflowException in RelMdUtil.estimateFilteredRows
> --------------------------------------------------------
>
>                 Key: CALCITE-1862
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1862
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: Julian Hyde
>            Priority: Major
>
> The query
> {code}select *
> from (
>   select *
>   from (
>     select cast(null as integer) as d
>     from "scott".emp)
>   where d is null and d is null)
> where d is null;{code}
> gives
> {noformat}
> java.lang.StackOverflowError
> > 	at org.apache.calcite.adapter.clone.ArrayTable.getStatistic(ArrayTable.java:76)
> > 	at org.apache.calcite.prepare.RelOptTableImpl.getRowCount(RelOptTableImpl.java:224)
> > 	at org.apache.calcite.rel.core.TableScan.estimateRowCount(TableScan.java:75)
> > 	at org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:206)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> > 	at org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> > 	at org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:71)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> > 	at org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> > 	at org.apache.calcite.rel.metadata.RelMdUtil.estimateFilteredRows(RelMdUtil.java:718)
> > 	at org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:123)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> > 	at org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> > 	at org.apache.calcite.rel.metadata.RelMdRowCount.getRowCount(RelMdRowCount.java:71)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount_$(Unknown Source)
> > 	at GeneratedMetadataHandler_RowCount.getRowCount(Unknown Source)
> > 	at org.apache.calcite.rel.metadata.RelMetadataQuery.getRowCount(RelMetadataQuery.java:236)
> > 	at org.apache.calcite.rel.metadata.RelMdUtil.estimateFilteredRows(RelMdUtil.java:718){noformat}
> For a test case, add the query to misc.iq and run QuidemTest.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)