From e6367e9ba849ad0d71c7092f94cd20d2c6f04164 Mon Sep 17 00:00:00 2001 From: HappenLee Date: Wed, 2 Sep 2020 10:54:45 +0800 Subject: [PATCH] [Bug] Support disable colocate join where join clause has join hint (#4497) Fix issue:#4496 --- .../java/org/apache/doris/planner/DistributedPlanner.java | 6 ++++++ .../test/java/org/apache/doris/planner/QueryPlanTest.java | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/DistributedPlanner.java b/fe/fe-core/src/main/java/org/apache/doris/planner/DistributedPlanner.java index 4eb9d709a7..fd4a2eb7bc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/DistributedPlanner.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/DistributedPlanner.java @@ -466,6 +466,12 @@ public class DistributedPlanner { return false; } + // If user have a join hint to use proper way of join, can not be colocate join + if (node.getInnerRef().hasJoinHints()) { + cannotReason.add("Has join hint"); + return false; + } + PlanNode leftRoot = leftChildFragment.getPlanRoot(); PlanNode rightRoot = rightChildFragment.getPlanRoot(); diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java index 98dac0dccc..b3c41e4699 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java @@ -941,6 +941,10 @@ public class QueryPlanTest { String explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr); Assert.assertTrue(explainString.contains("colocate: true")); + queryStr = "explain select * from test.colocate1 t1 join [shuffle] test.colocate2 t2 on t1.k1 = t2.k1 and t1.k2 = t2.k2"; + explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr); + Assert.assertTrue(explainString.contains("colocate: false")); + // t1.k1 = t2.k2 not same order with distribute column queryStr = "explain select * from test.colocate1 t1, test.colocate2 t2 where t1.k1 = t2.k2 and t1.k2 = t2.k1 and t1.k3 = t2.k3"; explainString = UtFrameUtils.getSQLPlanOrErrorMsg(connectContext, queryStr);