[
https://issues.apache.org/jira/browse/FLINK-10474?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16636841#comment-16636841
]
Hequn Cheng commented on FLINK-10474:
-------------------------------------
Hi [~fhueske] , I guess I miss something? The IN is translated during
SqlToRelConverter in Calcite before optimization. It will be converted into a
join or a OR predicate. I think we can force usage of OR in all cases. I plan
to add a rule to convert these predicates back to IN, for example, convert
predicate: (x = 1 OR x = 2 OR x = 3) AND y = 4 back to predicate: x IN (1, 2,
3) AND y = 4. We can generate code using a HashSet for the IN.
> Don't translate IN to JOIN with VALUES for streaming queries
> ------------------------------------------------------------
>
> Key: FLINK-10474
> URL: https://issues.apache.org/jira/browse/FLINK-10474
> Project: Flink
> Issue Type: Improvement
> Components: Table API & SQL
> Affects Versions: 1.6.1, 1.7.0
> Reporter: Fabian Hueske
> Assignee: Hequn Cheng
> Priority: Major
>
> IN clauses are translated to JOIN with VALUES if the number of elements in
> the IN clause exceeds a certain threshold. This should not be done, because a
> streaming join is very heavy and materializes both inputs (which is fine for
> the VALUES) input but not for the other.
> There are two ways to solve this:
> # don't translate IN to a JOIN at all
> # translate it to a JOIN but have a special join strategy if one input is
> bound and final (non-updating)
> Option 1. should be easy to do, option 2. requires much more effort.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)