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

ASF GitHub Bot commented on FLINK-8897:
---------------------------------------

fhueske commented on issue #6987: [FLINK-8897] [table] Fix rowtime 
materialization issues for filters and joins
URL: https://github.com/apache/flink/pull/6987#issuecomment-435869177
 
 
   Hi @hequn8128, the problem with throwing exceptions in the rules is that 
they result in canceling the optimizer completely, i.e., as soon as a rule is 
applied on a plan that does not meet the condition, the query fails even if the 
query could be transformed into a valid execution plan. I know that Calcite's 
"Cannot optimize" exceptions are hard to digest, but they are only thrown when 
the optimizer cannot generate a valid plan. 
   
   Aborting the optimization is especially tricky for specialized operators 
like window join that require very specific conditions. If these conditions are 
not met, the join can often be executed with a regular (fully materializing) 
join. I don't think we should speculate whether this is something that the user 
intended to do or not.
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Rowtime materialization causes "mismatched type" AssertionError
> ---------------------------------------------------------------
>
>                 Key: FLINK-8897
>                 URL: https://issues.apache.org/jira/browse/FLINK-8897
>             Project: Flink
>          Issue Type: Bug
>          Components: Table API & SQL
>            Reporter: Xingcan Cui
>            Assignee: Timo Walther
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.5.6
>
>
> As raised in [this 
> thread|https://lists.apache.org/thread.html/e2ea38aa7ae224d7481145334955d84243690e9aad10d58310bdb8e7@%3Cuser.flink.apache.org%3E],
>  the query created by the following code will throw a calcite "mismatch type" 
> ({{Timestamp(3)}} and {{TimeIndicator}}) exception.
> {code:java}
> String sql1 = "select id, eventTs as t1, count(*) over (partition by id order 
> by eventTs rows between 100 preceding and current row) as cnt1 from myTable1";
> String sql2 = "select distinct id as r_id, eventTs as t2, count(*) over 
> (partition by id order by eventTs rows between 50 preceding and current row) 
> as cnt2 from myTable2";
> Table left = tableEnv.sqlQuery(sql1);
> Table right = tableEnv.sqlQuery(sql2);
> left.join(right).where("id === r_id && t1 === t2").select("id, 
> t1").writeToSink(...)
> {code}
> The logical plan is as follows.
> {code}
> LogicalProject(id=[$0], t1=[$1])
>   LogicalFilter(condition=[AND(=($0, $3), =($1, $4))])
>     LogicalJoin(condition=[true], joinType=[inner])
>       LogicalAggregate(group=[{0, 1, 2}])
>         LogicalWindow(window#0=[window(partition {0} order by [1] rows 
> between $2 PRECEDING and CURRENT ROW aggs [COUNT()])])
>           LogicalProject(id=[$0], eventTs=[$3])
>             LogicalTableScan(table=[[_DataStreamTable_0]])
>       LogicalAggregate(group=[{0, 1, 2}])
>         LogicalWindow(window#0=[window(partition {0} order by [1] rows 
> between $2 PRECEDING and CURRENT ROW aggs [COUNT()])])
>           LogicalProject(id=[$0], eventTs=[$3])
>             LogicalTableScan(table=[[_DataStreamTable_0]])
> {code}
> That is because the the rowtime field after an aggregation will be 
> materialized while the {{RexInputRef}} type for the filter's operands ({{t1 
> === t2}}) is still {{TimeIndicator}}. We should make them unified.



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

Reply via email to