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) }