This is an automated email from the ASF dual-hosted git repository.

liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 553219830193ec43f7b6d68fe626b04456633120
Author: Pengfei Zhan <dethr...@gmail.com>
AuthorDate: Thu Jun 29 14:39:05 2023 +0800

    KYLIN-5743 optimization of SumExpression prevents ProjectJoinTransposeRule 
to hit AggIndex
---
 .../kylin/query/engine/SumExprPlannerTest.java     | 11 ++++++++
 .../kylin/query/engine/SumExprPlannerTest.xml      | 32 ++++++++++++++++++++++
 .../apache/kylin/query/engine/PlannerFactory.java  | 14 ++++++----
 3 files changed, 51 insertions(+), 6 deletions(-)

diff --git 
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
 
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
index 7e00b6cfb2..9692ec4f4e 100644
--- 
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
+++ 
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SumExprPlannerTest.java
@@ -199,6 +199,17 @@ public class SumExprPlannerTest extends 
CalciteRuleTestBase {
                         KapJoinRule.INSTANCE, KapProjectRule.INSTANCE));
     }
 
+    @Test
+    public void testSumExpressionSkipProjectJoinTransposeRule() {
+        String sql = "select  sum(  case  when LO_COMMITDATE = '20230501' then 
LO_DISCOUNT  end )\n" //
+                + "from  (\n" //
+                + "    select LO_COMMITDATE,  LO_DISCOUNT, 
P_LINEORDER.LO_ORDERDATE from  ssb.P_LINEORDER\n" //
+                + "  ) a\n" //
+                + "where  LO_COMMITDATE = ( select max(LO_COMMITDATE) from 
ssb.P_LINEORDER )";
+        openSumCaseWhen();
+        checkSQL("ssb", sql, null, null);
+    }
+
     @Test
     public void testAggPushdownWithCrossJoin1() {
 
diff --git 
a/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
 
b/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
index e7b560f9a5..0796314ef7 100644
--- 
a/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
+++ 
b/src/kylin-it/src/test/resources/org/apache/kylin/query/engine/SumExprPlannerTest.xml
@@ -1377,6 +1377,38 @@ KapOLAPToEnumerableConverter
 ]]>
         </Resource>
     </TestCase>
+    <TestCase name="testSumExpressionSkipProjectJoinTransposeRule">
+        <Resource name="planBefore">
+            <![CDATA[
+KapOLAPToEnumerableConverter
+  KapAggregateRel(group-set=[[]], groups=[null], EXPR$0=[SUM($0)], ctx=[])
+    KapProjectRel($f0=[CASE(=($0, 20230501), $1, null)], ctx=[])
+      KapJoinRel(condition=[=($0, $3)], joinType=[inner], ctx=[])
+        KapProjectRel(LO_COMMITDATE=[$15], LO_DISCOUNT=[$11], 
LO_ORDERDATE=[$5], ctx=[])
+          KapTableScan(table=[[SSB, P_LINEORDER]], ctx=[], fields=[[0, 1, 2, 
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]])
+        KapAggregateRel(group-set=[[]], groups=[null], EXPR$0=[MAX($0)], 
ctx=[])
+          KapProjectRel(LO_COMMITDATE=[$15], ctx=[])
+            KapTableScan(table=[[SSB, P_LINEORDER]], ctx=[], fields=[[0, 1, 2, 
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]])
+]]>
+        </Resource>
+        <Resource name="planAfter">
+            <![CDATA[
+KapOLAPToEnumerableConverter
+  KapAggregateRel(group-set=[[]], groups=[null], AGG$0=[SUM($0)], ctx=[])
+    KapProjectRel($f0=[CASE(=($0, 20230501), $1, null)], ctx=[])
+      KapAggregateRel(group-set=[[0]], groups=[null], TOP_AGG$0=[SUM($1)], 
TOP_AGG$1=[SUM($2)], ctx=[])
+        KapProjectRel(LO_COMMITDATE=[$0], SUM_CASE$0$0=[$1], $f2=[*(0, $2)], 
ctx=[])
+          KapAggregateRel(group-set=[[0]], groups=[null], 
SUM_CASE$0$0=[SUM($1)], SUM_CONST$1=[COUNT()], ctx=[])
+            KapProjectRel(LO_COMMITDATE=[$0], LO_DISCOUNT=[$1], ctx=[])
+              KapJoinRel(condition=[=($0, $3)], joinType=[inner], ctx=[])
+                KapProjectRel(LO_COMMITDATE=[$15], LO_DISCOUNT=[$11], 
LO_ORDERDATE=[$5], ctx=[])
+                  KapTableScan(table=[[SSB, P_LINEORDER]], ctx=[], fields=[[0, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]])
+                KapAggregateRel(group-set=[[]], groups=[null], 
EXPR$0=[MAX($0)], ctx=[])
+                  KapProjectRel(LO_COMMITDATE=[$15], ctx=[])
+                    KapTableScan(table=[[SSB, P_LINEORDER]], ctx=[], 
fields=[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]])
+]]>
+        </Resource>
+    </TestCase>
 
     <TestCase name="testAggPushdownWithCrossJoin2">
         <Resource name="planBefore">
diff --git 
a/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java 
b/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java
index 8616d6e14a..bac1fbf81b 100644
--- a/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java
+++ b/src/query/src/main/java/org/apache/kylin/query/engine/PlannerFactory.java
@@ -65,10 +65,13 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.kylin.common.KapConfig;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.debug.BackdoorToggles;
+import org.apache.kylin.guava30.shaded.common.base.Function;
+import org.apache.kylin.guava30.shaded.common.collect.ImmutableList;
+import org.apache.kylin.query.engine.meta.PlannerContext;
+import org.apache.kylin.query.relnode.OLAPContext;
+
 import io.kyligence.kap.query.optrule.AggregateMultipleExpandRule;
 import io.kyligence.kap.query.optrule.AggregateProjectReduceRule;
-import org.apache.kylin.query.relnode.OLAPContext;
-import org.apache.kylin.query.engine.meta.PlannerContext;
 import io.kyligence.kap.query.optrule.CorrReduceFunctionRule;
 import io.kyligence.kap.query.optrule.KAPValuesRule;
 import io.kyligence.kap.query.optrule.KapAggregateReduceFunctionsRule;
@@ -89,9 +92,6 @@ import io.kyligence.kap.query.optrule.KapWindowRule;
 import io.kyligence.kap.query.optrule.RightJoinToLeftJoinRule;
 import io.kyligence.kap.query.optrule.SumConstantConvertRule;
 
-import org.apache.kylin.guava30.shaded.common.base.Function;
-import org.apache.kylin.guava30.shaded.common.collect.ImmutableList;
-
 /**
  * factory that create optimizers and register opt rules
  * TODO sort and register only necessary rules
@@ -240,7 +240,9 @@ public class PlannerFactory {
         // UnionMergeRule may slow volcano planner optimization on large 
number of union clause
         planner.removeRule(UnionMergeRule.INSTANCE);
 
-        planner.addRule(KapProjectJoinTransposeRule.INSTANCE);
+        if (!kylinConfig.isConvertSumExpressionEnabled()) {
+            planner.addRule(KapProjectJoinTransposeRule.INSTANCE);
+        }
         planner.removeRule(ProjectRemoveRule.INSTANCE);
 
         // skip corr expandsion during model suggestion

Reply via email to