You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "liuyongvs (via GitHub)" <gi...@apache.org> on 2024/03/01 08:13:31 UTC
[PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
liuyongvs opened a new pull request, #24423:
URL: https://github.com/apache/flink/pull/24423
## What is the purpose of the change
The PR migrates ReplaceIntersectWithSemiJoinRule to java
it doesn't touch ReplaceIntersectWithSemiJoinRuleTest to be sure that java version continues passing it
## Verifying this change
This change is already covered by existing tests
## Does this pull request potentially affect one of the following parts:
- Dependencies (does it add or upgrade a dependency): (no)
- The public API, i.e., is any changed class annotated with `@Public(Evolving)`: (no)
- The serializers: (no)
- The runtime per-record code paths (performance sensitive): (no)
- Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Kubernetes/Yarn, ZooKeeper: (no)
- The S3 file system connector: (no)
## Documentation
- Does this pull request introduce a new feature? (no)
- If yes, how is the feature documented? (not applicable)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
Posted by "snuyanzin (via GitHub)" <gi...@apache.org>.
snuyanzin merged PR #24423:
URL: https://github.com/apache/flink/pull/24423
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
Posted by "liuyongvs (via GitHub)" <gi...@apache.org>.
liuyongvs commented on code in PR #24423:
URL: https://github.com/apache/flink/pull/24423#discussion_r1519068996
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/rules/logical/ReplaceIntersectWithSemiJoinRule.java:
##########
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.table.planner.plan.rules.logical;
+
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelRule;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Intersect;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.util.Util;
+import org.immutables.value.Value;
+
+import java.util.List;
+
+import static org.apache.flink.table.planner.plan.utils.SetOpRewriteUtil.generateEqualsCondition;
+
+/**
+ * Planner rule that replaces distinct {@link org.apache.calcite.rel.core.Intersect} with a distinct
+ * {@link org.apache.calcite.rel.core.Aggregate} on a SEMI {@link org.apache.calcite.rel.core.Join}.
Review Comment:
@snuyanzin fixed
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
Posted by "flinkbot (via GitHub)" <gi...@apache.org>.
flinkbot commented on PR #24423:
URL: https://github.com/apache/flink/pull/24423#issuecomment-1972719597
<!--
Meta data
{
"version" : 1,
"metaDataEntries" : [ {
"hash" : "41aede7dcd5552234b655a86a2dcbaa728863237",
"status" : "UNKNOWN",
"url" : "TBD",
"triggerID" : "41aede7dcd5552234b655a86a2dcbaa728863237",
"triggerType" : "PUSH"
} ]
}-->
## CI report:
* 41aede7dcd5552234b655a86a2dcbaa728863237 UNKNOWN
<details>
<summary>Bot commands</summary>
The @flinkbot bot supports the following commands:
- `@flinkbot run azure` re-run the last Azure build
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
Posted by "liuyongvs (via GitHub)" <gi...@apache.org>.
liuyongvs commented on code in PR #24423:
URL: https://github.com/apache/flink/pull/24423#discussion_r1519069215
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/rules/logical/ReplaceIntersectWithSemiJoinRule.java:
##########
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.table.planner.plan.rules.logical;
+
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelRule;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Intersect;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.util.Util;
+import org.immutables.value.Value;
+
+import java.util.List;
+
+import static org.apache.flink.table.planner.plan.utils.SetOpRewriteUtil.generateEqualsCondition;
+
+/**
+ * Planner rule that replaces distinct {@link org.apache.calcite.rel.core.Intersect} with a distinct
+ * {@link org.apache.calcite.rel.core.Aggregate} on a SEMI {@link org.apache.calcite.rel.core.Join}.
+ *
+ * <p>Only handle the case of input size 2.
+ */
+@Value.Enclosing
+public class ReplaceIntersectWithSemiJoinRule
+ extends RelRule<ReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig> {
+
+ public static final ReplaceIntersectWithSemiJoinRule INSTANCE =
+ ReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig.DEFAULT
+ .toRule();
+
+ private ReplaceIntersectWithSemiJoinRule(ReplaceIntersectWithSemiJoinRuleConfig config) {
+ super(config);
+ }
+
+ @Override
+ public boolean matches(RelOptRuleCall call) {
+ Intersect intersect = call.rel(0);
+ return !intersect.all && intersect.getInputs().size() == 2;
+ }
+
+ @Override
+ public void onMatch(RelOptRuleCall call) {
+ Intersect intersect = call.rel(0);
+ RelNode left = intersect.getInput(0);
+ RelNode right = intersect.getInput(1);
+
+ RelBuilder relBuilder = call.builder();
+ List<Integer> keys = Util.range(left.getRowType().getFieldCount());
+ List<RexNode> conditions = generateEqualsCondition(relBuilder, left, right, keys);
+
+ relBuilder.push(left);
+ relBuilder.push(right);
+ relBuilder
+ .join(JoinRelType.SEMI, conditions)
+ .aggregate(
+ relBuilder.groupKey(keys.stream().mapToInt(Integer::intValue).toArray()));
+ RelNode rel = relBuilder.build();
+ call.transformTo(rel);
+ }
+
+ /** Rule configuration. */
+ @Value.Immutable(singleton = false)
+ public interface ReplaceIntersectWithSemiJoinRuleConfig extends RelRule.Config {
+ ReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig DEFAULT =
+ ImmutableReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig
+ .builder()
+ .build()
+ .withOperandSupplier(b0 -> b0.operand(Intersect.class).anyInputs())
+ .withRelBuilderFactory(RelFactories.LOGICAL_BUILDER)
+ .withDescription("ReplaceIntersectWithSemiJoinRule");
Review Comment:
left as is, others do it same
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
Posted by "liuyongvs (via GitHub)" <gi...@apache.org>.
liuyongvs commented on PR #24423:
URL: https://github.com/apache/flink/pull/24423#issuecomment-1980639698
hi @dawidwys will you also help review this pr ?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
Posted by "snuyanzin (via GitHub)" <gi...@apache.org>.
snuyanzin commented on code in PR #24423:
URL: https://github.com/apache/flink/pull/24423#discussion_r1518998032
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/rules/logical/ReplaceIntersectWithSemiJoinRule.java:
##########
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.table.planner.plan.rules.logical;
+
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelRule;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Intersect;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.util.Util;
+import org.immutables.value.Value;
+
+import java.util.List;
+
+import static org.apache.flink.table.planner.plan.utils.SetOpRewriteUtil.generateEqualsCondition;
+
+/**
+ * Planner rule that replaces distinct {@link org.apache.calcite.rel.core.Intersect} with a distinct
+ * {@link org.apache.calcite.rel.core.Aggregate} on a SEMI {@link org.apache.calcite.rel.core.Join}.
Review Comment:
nit: is there a reason we use absolute name in javadocs?
in scala it was relative why can't we follow same approach?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] [FLINK-34494][table] Migrate ReplaceIntersectWithSemiJoinRule to java. [flink]
Posted by "snuyanzin (via GitHub)" <gi...@apache.org>.
snuyanzin commented on code in PR #24423:
URL: https://github.com/apache/flink/pull/24423#discussion_r1519025405
##########
flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/rules/logical/ReplaceIntersectWithSemiJoinRule.java:
##########
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.flink.table.planner.plan.rules.logical;
+
+import org.apache.calcite.plan.RelOptRuleCall;
+import org.apache.calcite.plan.RelRule;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Intersect;
+import org.apache.calcite.rel.core.JoinRelType;
+import org.apache.calcite.rel.core.RelFactories;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.util.Util;
+import org.immutables.value.Value;
+
+import java.util.List;
+
+import static org.apache.flink.table.planner.plan.utils.SetOpRewriteUtil.generateEqualsCondition;
+
+/**
+ * Planner rule that replaces distinct {@link org.apache.calcite.rel.core.Intersect} with a distinct
+ * {@link org.apache.calcite.rel.core.Aggregate} on a SEMI {@link org.apache.calcite.rel.core.Join}.
+ *
+ * <p>Only handle the case of input size 2.
+ */
+@Value.Enclosing
+public class ReplaceIntersectWithSemiJoinRule
+ extends RelRule<ReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig> {
+
+ public static final ReplaceIntersectWithSemiJoinRule INSTANCE =
+ ReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig.DEFAULT
+ .toRule();
+
+ private ReplaceIntersectWithSemiJoinRule(ReplaceIntersectWithSemiJoinRuleConfig config) {
+ super(config);
+ }
+
+ @Override
+ public boolean matches(RelOptRuleCall call) {
+ Intersect intersect = call.rel(0);
+ return !intersect.all && intersect.getInputs().size() == 2;
+ }
+
+ @Override
+ public void onMatch(RelOptRuleCall call) {
+ Intersect intersect = call.rel(0);
+ RelNode left = intersect.getInput(0);
+ RelNode right = intersect.getInput(1);
+
+ RelBuilder relBuilder = call.builder();
+ List<Integer> keys = Util.range(left.getRowType().getFieldCount());
+ List<RexNode> conditions = generateEqualsCondition(relBuilder, left, right, keys);
+
+ relBuilder.push(left);
+ relBuilder.push(right);
+ relBuilder
+ .join(JoinRelType.SEMI, conditions)
+ .aggregate(
+ relBuilder.groupKey(keys.stream().mapToInt(Integer::intValue).toArray()));
+ RelNode rel = relBuilder.build();
+ call.transformTo(rel);
+ }
+
+ /** Rule configuration. */
+ @Value.Immutable(singleton = false)
+ public interface ReplaceIntersectWithSemiJoinRuleConfig extends RelRule.Config {
+ ReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig DEFAULT =
+ ImmutableReplaceIntersectWithSemiJoinRule.ReplaceIntersectWithSemiJoinRuleConfig
+ .builder()
+ .build()
+ .withOperandSupplier(b0 -> b0.operand(Intersect.class).anyInputs())
+ .withRelBuilderFactory(RelFactories.LOGICAL_BUILDER)
+ .withDescription("ReplaceIntersectWithSemiJoinRule");
Review Comment:
very nit: in fact could be left as is
however it also could be moved to builder and then the will not be created extra objects
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org