-
Notifications
You must be signed in to change notification settings - Fork 13.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FLINK-12371] [table-planner-blink] Add support for converting (NOT) IN/ (NOT) EXISTS to semi-join/anti-join, and generating optimized logical plan #8317
Conversation
Thanks a lot for your contribution to the Apache Flink project. I'm the @flinkbot. I help the community Review Progress
Please see the Pull Request Review Guide for a full explanation of the review process. The Bot is tracking the review progress through labels. Labels are applied according to the order of the review items. For consensus, approval by a Flink committer of PMC member is required Bot commandsThe @flinkbot bot supports the following commands:
|
* | ||
* <p>The effect is something like the SQL {@code IN} operator. | ||
*/ | ||
public class SemiJoin extends Join { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
cc @danny0405 , does this consistent with calcite's latest changes?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, SemiJoin
would be deprecated in Calcite 1.20.0, we should use Join
with JoinRelType#SEMI
instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@godfreyhe how about trying to be consistent with Calcite? Will that involve a lot of changes?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, we can borrow some implementations from apache/calcite#1157 now, and remove them after we upgrade a calcite version which contains that pr (maybe calcite 1.20). I finally find that only Join
, JoinRelType
, RelDecorrelator
and some utility methods need to be copied to Flink project, and it's more clearer than before. I find some bugs and some features to improve, and have feedback to @danny0405
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.apache.calcite.rel.core; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we should try to avoid making this package exactly the same with Calcite's? It will make developer confusing which one did we import.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If packages are different betweent Flink Join
and Calcite Join
, we need to copy all codes associated with Join
from Calcite to Flink. This class will be delete when calcite-1.20 is released. (may be one month later)
changes looks good to me, please correct failed tests |
…IN/ (NOT) EXISTS to SemiJoin, and generating optimized logical plan
@KurtYoung I have fixed the failed test cases, the current failing is in |
What is the purpose of the change
Add support for converting (NOT) IN/ (NOT) EXISTS to semi-join/anti-join, and generating optimized logical plan
Brief change log
Verifying this change
This change added tests and can be verified as follows:
Does this pull request potentially affect one of the following parts:
@Public(Evolving)
: (no)Documentation