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 cb2a11d503f4d857b236ea62152d606d5c8d5fe7
Author: Zhiting Guo <35057824+fre...@users.noreply.github.com>
AuthorDate: Fri Aug 11 11:29:19 2023 +0800

    KYLIN-5781 Adjust the query result order of sql with union
    
    Co-authored-by: Zhiting Guo <zhiting....@kyligence.io>
---
 .../main/java/org/apache/kylin/common/KylinConfigBase.java    |  4 ++++
 .../org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala | 11 +++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git 
a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index f48c808cdc..eddb15bffa 100644
--- a/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/src/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -1914,6 +1914,10 @@ public abstract class KylinConfigBase implements 
Serializable {
         return 
Boolean.parseBoolean(this.getOptional("kylin.query.replace-dynamic-params-enabled",
 FALSE));
     }
 
+    public boolean isCollectUnionInOrder() {
+        return 
Boolean.parseBoolean(this.getOptional("kylin.query.collect-union-in-order", 
TRUE));
+    }
+
     // 
============================================================================
     // Cache
     // 
============================================================================
diff --git 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
index bab69339b4..76e9940270 100644
--- 
a/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
+++ 
b/src/spark-project/sparder/src/main/scala/org/apache/kylin/query/runtime/CalciteToSparkPlaner.scala
@@ -19,13 +19,13 @@
 package org.apache.kylin.query.runtime
 
 import java.util
+import java.util.Collections
 
-import org.apache.kylin.guava30.shaded.common.collect.Lists
-import org.apache.kylin.engine.spark.utils.LogEx
 import org.apache.calcite.DataContext
 import org.apache.calcite.rel.{RelNode, RelVisitor}
 import org.apache.kylin.common.KylinConfig
 import org.apache.kylin.engine.spark.utils.LogEx
+import org.apache.kylin.guava30.shaded.common.collect.Lists
 import org.apache.kylin.query.relnode.{KapAggregateRel, KapFilterRel, 
KapJoinRel, KapLimitRel, KapMinusRel, KapModelViewRel, KapNonEquiJoinRel, 
KapProjectRel, KapRel, KapSortRel, KapTableScan, KapUnionRel, KapValuesRel, 
KapWindowRel}
 import org.apache.kylin.query.runtime.plan.{AggregatePlan, FilterPlan, 
LimitPlan, ProjectPlan, SortPlan, TableScanPlan, ValuesPlan, WindowPlan}
 import org.apache.kylin.query.util.KapRelUtil
@@ -84,8 +84,11 @@ class CalciteToSparkPlaner(dataContext: DataContext) extends 
RelVisitor with Log
       case rel: KapNonEquiJoinRel => convertNonEquiJoinRel(rel)
       case rel: KapUnionRel =>
         val size = setOpStack.pop()
-        val java = Range(0, stack.size() - size).map(a => stack.pop()).asJava
-        logTime("union") { plan.UnionPlan.union(Lists.newArrayList(java), rel, 
dataContext) }
+        var unionBlocks = Range(0, stack.size() - size).map(a => stack.pop())
+        if (KylinConfig.getInstanceFromEnv.isCollectUnionInOrder) {
+          unionBlocks = unionBlocks.reverse
+        }
+        logTime("union") { plan.UnionPlan.union(unionBlocks.asJava, rel, 
dataContext) }
       case rel: KapMinusRel =>
         val size = setOpStack.pop()
         logTime("minus") { plan.MinusPlan.minus(Range(0, stack.size() - 
size).map(a => stack.pop()).reverse, rel, dataContext) }

Reply via email to