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/394edca0 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/394edca0 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/394edca0 Branch: refs/heads/2.1.x Commit: 394edca0ba68f4cf4731b6934357e580b92120e8 Parents: 5710614 Author: Roger Shi <rogershijich...@hotmail.com> Authored: Sun Aug 20 13:41:16 2017 +0800 Committer: Roger Shi <rogershijich...@hotmail.com> Committed: Sun Aug 20 13:54:24 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/394edca0/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/394edca0/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();