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

Reply via email to