This is an automated email from the ASF dual-hosted git repository.
jlfsdtc pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/kylin5 by this push:
new 6167a3577d KYLIN-6085 Add config to control removal of ORDER BY in SQL
subqueries.
6167a3577d is described below
commit 6167a3577d6b95495fff3853ebe40e0f69020147
Author: jlf <[email protected]>
AuthorDate: Mon Oct 20 14:00:44 2025 +0800
KYLIN-6085 Add config to control removal of ORDER BY in SQL subqueries.
---
.../org/apache/kylin/common/KylinConfigBase.java | 4 ++++
.../apache/kylin/query/engine/SqlToRelNodeTest.java | 21 +++++++++++++++++++++
.../org/apache/kylin/query/engine/SqlConverter.java | 1 +
3 files changed, 26 insertions(+)
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 c4f124c451..5058970dcf 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
@@ -2797,6 +2797,10 @@ public abstract class KylinConfigBase implements
Serializable {
return
Integer.parseInt(getOptional("kylin.query.convert-in-to-or-threshold", "20"));
}
+ public boolean isRemoveSortInSubQuery() {
+ return
Boolean.parseBoolean(getOptional("kylin.query.calcite.remove-sort-in-subquery",
FALSE));
+ }
+
public boolean isEnumerableRulesEnabled() {
return
Boolean.parseBoolean(getOptional("kylin.query.calcite.enumerable-rules-enabled",
FALSE));
}
diff --git
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SqlToRelNodeTest.java
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SqlToRelNodeTest.java
index f4c0e640ae..cc38c4d74e 100644
---
a/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SqlToRelNodeTest.java
+++
b/src/kylin-it/src/test/java/org/apache/kylin/query/engine/SqlToRelNodeTest.java
@@ -27,6 +27,7 @@ import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.RelRoot;
import org.apache.calcite.rel.RelVisitor;
import org.apache.calcite.rel.core.CorrelationId;
+import org.apache.calcite.rel.logical.LogicalSort;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.sql.parser.SqlParseException;
import org.apache.calcite.sql.type.SqlTypeName;
@@ -35,6 +36,7 @@ import org.apache.calcite.util.Litmus;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.util.Pair;
import org.apache.kylin.guava30.shaded.common.collect.ImmutableSet;
+import org.apache.kylin.query.relnode.OlapTableScan;
import org.apache.kylin.query.rules.CalciteRuleTestBase;
import org.junit.After;
import org.junit.Assert;
@@ -175,4 +177,23 @@ public class SqlToRelNodeTest extends CalciteRuleTestBase {
Pair<String, String> sql = readOneSQL(config, "ssb",
"query/sql_sqlnode", "query01.sql");
checkSQLOptimize("ssb", sql.getSecond(), "query01");
}
+
+ @Test
+ public void testRemoveSortInSubQuery() {
+ overwriteSystemProp("kylin.query.calcite.remove-sort-in-subquery",
"true");
+ queryExec = new QueryExec(PROJECT, config);
+ String sql = "select a.* from (select * from SSB.CUSTOMER where 1=1
order by SSB.CUSTOMER.C_CUSTKEY) a";
+ RelNode relNode = sqlToRelRoot("ssb", sql,
KylinConfig.getInstanceFromEnv()).rel;
+ Assert.assertNotEquals(relNode.getInput(0).getClass(),
LogicalSort.class);
+ Assert.assertEquals(relNode.getInput(0).getInput(0).getClass(),
OlapTableScan.class);
+ }
+
+ @Test
+ public void testNotRemoveSortInSubQuery() {
+ overwriteSystemProp("kylin.query.calcite.remove-sort-in-subquery",
"false");
+ queryExec = new QueryExec(PROJECT, config);
+ String sql = "select a.* from (select * from SSB.CUSTOMER where 1=1
order by SSB.CUSTOMER.C_CUSTKEY) a";
+ RelNode relNode = sqlToRelRoot("ssb", sql,
KylinConfig.getInstanceFromEnv()).rel;
+ Assert.assertEquals(relNode.getInput(0).getClass(), LogicalSort.class);
+ }
}
diff --git
a/src/query-common/src/main/java/org/apache/kylin/query/engine/SqlConverter.java
b/src/query-common/src/main/java/org/apache/kylin/query/engine/SqlConverter.java
index d664060c54..e8e90a82a3 100644
---
a/src/query-common/src/main/java/org/apache/kylin/query/engine/SqlConverter.java
+++
b/src/query-common/src/main/java/org/apache/kylin/query/engine/SqlConverter.java
@@ -145,6 +145,7 @@ public class SqlConverter {
SqlToRelConverter.Config config = SqlToRelConverter.CONFIG //
.withTrimUnusedFields(true) // trim unused fields
.withInSubQueryThreshold(kylinConfig.convertInSubQueryThreshold()) // handle
in-to-or
+ .withRemoveSortInSubQuery(kylinConfig.isRemoveSortInSubQuery())
.withExpand(Boolean.TRUE.equals(Prepare.THREAD_EXPAND.get()))
//
.addRelBuilderConfigTransform(x ->
x.withBloat(kylinConfig.getProjectBloatThreshold())) // bloat
.withExplain(false);