minor, provide option to refuse sql without aggcall
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/adb04cda Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/adb04cda Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/adb04cda Branch: refs/heads/master Commit: adb04cda694e6f9d534ab32adb57ed97f080ced0 Parents: 3f11a59 Author: Roger Shi <rogershijich...@hotmail.com> Authored: Sun Sep 3 22:12:57 2017 +0800 Committer: Roger Shi <rogershijich...@gmail.com> Committed: Sun Sep 3 22:27:39 2017 +0800 ---------------------------------------------------------------------- .../java/org/apache/kylin/common/KylinConfigBase.java | 4 ++++ .../src/main/java/org/apache/kylin/cube/CubeInstance.java | 10 ++++++++++ 2 files changed, 14 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/adb04cda/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 9533400..78edd67 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 @@ -973,6 +973,10 @@ abstract public class KylinConfigBase implements Serializable { return Boolean.valueOf(getOptional("kylin.query.skip-empty-segments", "true")); } + public boolean isDisableCubeNoAggSQL() { + return Boolean.valueOf(getOptional("kylin.query.disable-cube-noagg-sql", "false")); + } + public boolean isStreamAggregateEnabled() { return Boolean.parseBoolean(getOptional("kylin.query.stream-aggregate-enabled", "true")); } http://git-wip-us.apache.org/repos/asf/kylin/blob/adb04cda/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java ---------------------------------------------------------------------- diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java index fad942c..9f3336c 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeInstance.java @@ -292,6 +292,7 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, @Override public CapabilityResult isCapable(SQLDigest digest) { CapabilityResult result = CubeCapabilityChecker.check(this, digest); + result = localCapacityCheck(digest, result); if (result.capable) { result.cost = getCost(digest); for (CapabilityInfluence i : result.influences) { @@ -303,6 +304,15 @@ public class CubeInstance extends RootPersistentEntity implements IRealization, return result; } + private CapabilityResult localCapacityCheck(SQLDigest digest, CapabilityResult originResult) { + if (this.getDescriptor().getConfig().isDisableCubeNoAggSQL()) { + CapabilityResult notCap = new CapabilityResult(); + notCap.capable = false; + return digest.aggregations.isEmpty() ? notCap : originResult ; + } + return originResult; + } + public int getCost(SQLDigest digest) { int calculatedCost = cost;