This is an automated email from the ASF dual-hosted git repository.
yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 901bdf998f4 Re-enable JoinPushTransitivePredicates optimization rule
by default (#18720)
901bdf998f4 is described below
commit 901bdf998f4b82e56dafa3938fede951f9e6299d
Author: Yash Mayya <[email protected]>
AuthorDate: Wed Jun 10 10:28:11 2026 -0700
Re-enable JoinPushTransitivePredicates optimization rule by default (#18720)
---
.../java/org/apache/pinot/query/QueryCompilationTest.java | 2 +-
.../src/test/resources/queries/ExplainPhysicalPlans.json | 6 ++++--
pinot-query-planner/src/test/resources/queries/JoinPlans.json | 11 +++++++----
.../src/test/resources/queries/PhysicalOptimizerPlans.json | 7 ++++---
.../main/java/org/apache/pinot/spi/utils/CommonConstants.java | 1 -
5 files changed, 16 insertions(+), 11 deletions(-)
diff --git
a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
index fc279cd2965..142eddcb05b 100644
---
a/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
+++
b/pinot-query-planner/src/test/java/org/apache/pinot/query/QueryCompilationTest.java
@@ -344,7 +344,7 @@ public class QueryCompilationTest extends
QueryEnvironmentTestBase {
public void testJoinPushTransitivePredicate() {
// queries involving extra predicate on join keys
// should be optimized to push the predicate to both sides of the join if
applicable
- String query = "SET usePlannerRules='JoinPushTransitivePredicates';
EXPLAIN PLAN FOR\n"
+ String query = "EXPLAIN PLAN FOR\n"
+ "SELECT * FROM a\n"
+ "JOIN b\n"
+ "ON a.col1 = b.col1\n"
diff --git
a/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json
b/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json
index 6db0627ff64..b64b2da593d 100644
--- a/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json
+++ b/pinot-query-planner/src/test/resources/queries/ExplainPhysicalPlans.json
@@ -181,7 +181,8 @@
"\n └── [2]@localhost:1|[1] AGGREGATE_LEAF",
"\n └── [2]@localhost:1|[1] JOIN",
"\n ├── [2]@localhost:1|[1] PROJECT",
- "\n │ └── [2]@localhost:1|[1] TABLE SCAN
(a) null",
+ "\n │ └── [2]@localhost:1|[1] FILTER",
+ "\n │ └── [2]@localhost:1|[1] TABLE
SCAN (a) null",
"\n └── [2]@localhost:1|[1]
MAIL_RECEIVE(BROADCAST_DISTRIBUTED)",
"\n ├── [3]@localhost:2|[2]
MAIL_SEND(BROADCAST_DISTRIBUTED)->{[2]@localhost:1|[0, 1],[2]@localhost:2|[2,
3]} (Subtree Omitted)",
"\n ├── [3]@localhost:2|[3]
MAIL_SEND(BROADCAST_DISTRIBUTED)->{[2]@localhost:1|[0, 1],[2]@localhost:2|[2,
3]} (Subtree Omitted)",
@@ -209,7 +210,8 @@
"\n └── [2]@localhost:1|[1] AGGREGATE_LEAF",
"\n └── [2]@localhost:1|[1] JOIN",
"\n ├── [2]@localhost:1|[1] PROJECT",
- "\n │ └── [2]@localhost:1|[1] TABLE SCAN
(a) null",
+ "\n │ └── [2]@localhost:1|[1] FILTER",
+ "\n │ └── [2]@localhost:1|[1] TABLE
SCAN (a) null",
"\n └── [2]@localhost:1|[1]
MAIL_RECEIVE(SINGLETON)",
"\n ├── [3]@localhost:2|[2]
MAIL_SEND(SINGLETON)[PARTITIONED]->{[2]@localhost:2|[2]} (Subtree Omitted)",
"\n ├── [3]@localhost:2|[3]
MAIL_SEND(SINGLETON)[PARTITIONED]->{[2]@localhost:2|[3]} (Subtree Omitted)",
diff --git a/pinot-query-planner/src/test/resources/queries/JoinPlans.json
b/pinot-query-planner/src/test/resources/queries/JoinPlans.json
index 113b696a075..a5fde2dc628 100644
--- a/pinot-query-planner/src/test/resources/queries/JoinPlans.json
+++ b/pinot-query-planner/src/test/resources/queries/JoinPlans.json
@@ -518,7 +518,8 @@
"\nLogicalJoin(condition=[=($2, $9)], joinType=[semi])",
"\n LogicalJoin(condition=[=($1, $9)], joinType=[semi])",
"\n LogicalJoin(condition=[=($1, $9)], joinType=[semi])",
- "\n PinotLogicalTableScan(table=[[default, a]])",
+ "\n LogicalFilter(condition=[<($2, 100)])",
+ "\n PinotLogicalTableScan(table=[[default, a]])",
"\n PinotLogicalExchange(distribution=[broadcast],
relExchangeType=[PIPELINE_BREAKER])",
"\n LogicalProject(col1=[$0])",
"\n LogicalFilter(condition=[SEARCH($1,
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"),
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET
\"UTF-8\")])",
@@ -547,7 +548,8 @@
"\n LogicalProject(col3=[$1])",
"\n LogicalJoin(condition=[=($0, $2)], joinType=[semi])",
"\n LogicalProject(col2=[$1], col3=[$2])",
- "\n PinotLogicalTableScan(table=[[default, a]])",
+ "\n LogicalFilter(condition=[<($2, 100)])",
+ "\n PinotLogicalTableScan(table=[[default, a]])",
"\n PinotLogicalExchange(distribution=[broadcast],
relExchangeType=[PIPELINE_BREAKER])",
"\n LogicalProject(col1=[$0])",
"\n LogicalFilter(condition=[SEARCH($1,
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"),
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET
\"UTF-8\")])",
@@ -575,7 +577,8 @@
"\n LogicalProject(col1=[$0], col3=[$2])",
"\n LogicalJoin(condition=[=($1, $3)],
joinType=[semi])",
"\n LogicalProject(col1=[$0], col2=[$1], col3=[$2])",
- "\n PinotLogicalTableScan(table=[[default, a]])",
+ "\n LogicalFilter(condition=[<($2, 100)])",
+ "\n PinotLogicalTableScan(table=[[default, a]])",
"\n PinotLogicalExchange(distribution=[broadcast],
relExchangeType=[PIPELINE_BREAKER])",
"\n LogicalProject(col1=[$0])",
"\n LogicalFilter(condition=[SEARCH($1,
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"),
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET
\"UTF-8\")])",
@@ -602,7 +605,7 @@
"\n PinotLogicalTableScan(table=[[default, a]])",
"\n PinotLogicalExchange(distribution=[broadcast],
relExchangeType=[PIPELINE_BREAKER])",
"\n LogicalProject(col3=[$2])",
- "\n LogicalFilter(condition=[SEARCH($1,
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"),
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET
\"UTF-8\")])",
+ "\n LogicalFilter(condition=[AND(SEARCH($1,
Sarg[(-∞.._UTF-8'bar':VARCHAR CHARACTER SET \"UTF-8\"), (_UTF-8'bar':VARCHAR
CHARACTER SET \"UTF-8\".._UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"),
(_UTF-8'foo':VARCHAR CHARACTER SET \"UTF-8\"..+∞)]:VARCHAR CHARACTER SET
\"UTF-8\"), <($2, 100))])",
"\n PinotLogicalTableScan(table=[[default, a]])",
"\n"
]
diff --git
a/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json
b/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json
index 5914526e0b1..771374c9fc5 100644
--- a/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json
+++ b/pinot-query-planner/src/test/resources/queries/PhysicalOptimizerPlans.json
@@ -73,13 +73,14 @@
"\n PhysicalJoin(condition=[=($0, $1)], joinType=[inner])",
"\n
PhysicalExchange(exchangeStrategy=[PARTITIONING_EXCHANGE], distKeys=[[0]])",
"\n PhysicalProject(col1=[$0])",
- "\n PhysicalTableScan(table=[[default, a]])",
+ "\n PhysicalFilter(condition=[=($0, _UTF-8'foo')])",
+ "\n PhysicalTableScan(table=[[default, a]])",
"\n
PhysicalExchange(exchangeStrategy=[PARTITIONING_EXCHANGE], distKeys=[[0]])",
"\n PhysicalProject(name=[$1])",
"\n PhysicalJoin(condition=[=($0, $2)],
joinType=[inner])",
- "\n PhysicalValues(tuples=[[{ 1, _UTF-8'foo' }]])",
+ "\n PhysicalValues(tuples=[[]])",
"\n PhysicalProject(EXPR$0=[$0])",
- "\n PhysicalValues(tuples=[[{ 2, _UTF-8'bar' }]])",
+ "\n PhysicalValues(tuples=[[]])",
"\n"
]
}
diff --git
a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
index 17084994f6d..0a6afcbb976 100644
--- a/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
+++ b/pinot-spi/src/main/java/org/apache/pinot/spi/utils/CommonConstants.java
@@ -1092,7 +1092,6 @@ public class CommonConstants {
PlannerRuleNames.AGGREGATE_UNION_AGGREGATE,
PlannerRuleNames.JOIN_TO_ENRICHED_JOIN,
PlannerRuleNames.AGGREGATE_FUNCTION_REWRITE,
- PlannerRuleNames.JOIN_PUSH_TRANSITIVE_PREDICATES,
// Stock Calcite rule kept opt-in via usePlannerRules — see
SORT_PROJECT_TRANSPOSE javadoc
// above for the rationale (firing in BASIC_RULES disrupts
ProjectToSemiJoinRule on
// partition-hinted IN(SELECT) queries, breaking colocated broadcast
semi-joins).
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]