KYLIN-2649 configuration of force limit on "select star" query

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/c4f125c4
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/c4f125c4
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/c4f125c4

Branch: refs/heads/master
Commit: c4f125c4750ef8d0c754d7a00c2ad100c6999cf6
Parents: 6ec099b
Author: Roger Shi <rogershijich...@hotmail.com>
Authored: Sun Aug 20 13:41:16 2017 +0800
Committer: Roger Shi <rogershijich...@gmail.com>
Committed: Sun Aug 20 14:06:28 2017 +0800

----------------------------------------------------------------------
 .../main/java/org/apache/kylin/common/KylinConfigBase.java    | 6 ++++++
 .../src/main/java/org/apache/kylin/query/util/QueryUtil.java  | 7 +++++++
 2 files changed, 13 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/c4f125c4/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
----------------------------------------------------------------------
diff --git 
a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java 
b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
index 78abf22..df74f5e 100644
--- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
+++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java
@@ -936,6 +936,12 @@ abstract public class KylinConfigBase implements 
Serializable {
         return Integer.parseInt(getOptional("kylin.query.max-limit-pushdown", 
"10000"));
     }
 
+    // Select star on large table is too slow for BI, add limit by default if 
missing
+    // https://issues.apache.org/jira/browse/KYLIN-2649
+    public int getForceLimit() {
+        return Integer.parseInt(getOptional("kylin.query.force-limit", "-1"));
+    }
+
     @Deprecated
     public int getScanThreshold() {
         return Integer.parseInt(getOptional("kylin.query.scan-threshold", 
"10000000"));

http://git-wip-us.apache.org/repos/asf/kylin/blob/c4f125c4/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
----------------------------------------------------------------------
diff --git a/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java 
b/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
index 29e2c26..4befd33 100644
--- a/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
+++ b/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
@@ -44,6 +44,7 @@ public class QueryUtil {
     public static String massageSql(String sql, String project, int limit, int 
offset) {
         sql = sql.trim();
         sql = sql.replace("\r", " ").replace("\n", 
System.getProperty("line.separator"));
+        KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv();
 
         while (sql.endsWith(";"))
             sql = sql.substring(0, sql.length() - 1);
@@ -56,6 +57,12 @@ public class QueryUtil {
             sql += ("\nOFFSET " + offset);
         }
 
+        // https://issues.apache.org/jira/browse/KYLIN-2649
+        if (kylinConfig.getForceLimit() > 0 &&
+                !sql.toLowerCase().contains("limit") && 
sql.toLowerCase().contains("*")) {
+            sql += ("\nLIMIT " + kylinConfig.getForceLimit());
+        }
+
         // customizable SQL transformation
         if (queryTransformers == null) {
             initQueryTransformers();

Reply via email to