You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2016/10/21 10:07:51 UTC
[3/8] kylin git commit: KYLIN-2086 Still report error when there is
more than 12 dimensions in one agg group
KYLIN-2086 Still report error when there is more than 12 dimensions in one agg group
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/325803d2
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/325803d2
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/325803d2
Branch: refs/heads/KYLIN-1971
Commit: 325803d2ff47f8b2b7e9e326cc7d1781fa9877d5
Parents: 5aa0ae3
Author: shaofengshi <sh...@apache.org>
Authored: Fri Oct 21 14:28:49 2016 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Fri Oct 21 14:28:49 2016 +0800
----------------------------------------------------------------------
.../validation/rule/AggregationGroupRule.java | 34 +++++++-------------
.../kylin/cube/AggregationGroupRuleTest.java | 8 ++---
2 files changed, 16 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/325803d2/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/AggregationGroupRule.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/AggregationGroupRule.java b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/AggregationGroupRule.java
index defe898..7b90782 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/AggregationGroupRule.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/AggregationGroupRule.java
@@ -23,7 +23,6 @@ import java.util.Set;
import java.util.TreeSet;
import org.apache.commons.collections.CollectionUtils;
-import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.cube.model.AggregationGroup;
import org.apache.kylin.cube.model.CubeDesc;
import org.apache.kylin.cube.model.validation.IValidatorRule;
@@ -41,16 +40,7 @@ public class AggregationGroupRule implements IValidatorRule<CubeDesc> {
inner(cube, context);
}
- private int count(String[][] input) {
- if (input == null) {
- return 0;
- } else {
- return input.length;
- }
- }
-
private void inner(CubeDesc cube, ValidateContext context) {
- int maxSize = getMaxAgrGroupSize();
int index = 0;
for (AggregationGroup agg : cube.getAggregationGroups()) {
@@ -64,6 +54,7 @@ public class AggregationGroupRule implements IValidatorRule<CubeDesc> {
continue;
}
+ int combination = 1;
Set<String> includeDims = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
if (agg.getIncludes() != null) {
for (String include : agg.getIncludes()) {
@@ -84,6 +75,7 @@ public class AggregationGroupRule implements IValidatorRule<CubeDesc> {
for (String s : ss) {
hierarchyDims.add(s);
}
+ combination = combination * (ss.length + 1);
}
}
@@ -93,6 +85,7 @@ public class AggregationGroupRule implements IValidatorRule<CubeDesc> {
for (String s : ss) {
jointDims.add(s);
}
+ combination = combination * 2;
}
}
@@ -107,15 +100,7 @@ public class AggregationGroupRule implements IValidatorRule<CubeDesc> {
normalDims.removeAll(hierarchyDims);
normalDims.removeAll(jointDims);
- int normalDimSize = normalDims.size();
- int hierarchySize = count(agg.getSelectRule().hierarchy_dims);
- int jointSize = count(agg.getSelectRule().joint_dims);
- int mandatorySize = mandatoryDims.size() > 0 ? 1 : 0;
-
- if (mandatorySize + normalDimSize + hierarchySize + jointSize > maxSize) {
- context.addResult(ResultLevel.ERROR, "Aggregation group " + index + " has too many dimensions");
- continue;
- }
+ combination = combination * (1 << normalDims.size());
if (CollectionUtils.containsAny(mandatoryDims, hierarchyDims)) {
context.addResult(ResultLevel.ERROR, "Aggregation group " + index + " mandatory dims overlap with hierarchy dims");
@@ -169,12 +154,17 @@ public class AggregationGroupRule implements IValidatorRule<CubeDesc> {
}
}
+ if (combination > getMaxCombinations(cube)) {
+ String msg = "Aggregation group " + index + " has too many combinations, use 'mandatory'/'hierarchy'/'joint' to optimize; or update 'kylin.cube.aggrgroup.max.combination' to a bigger value.";
+ context.addResult(ResultLevel.ERROR, msg);
+ continue;
+ }
+
index++;
}
}
- @SuppressWarnings("deprecation")
- protected int getMaxAgrGroupSize() {
- return KylinConfig.getInstanceFromEnv().getCubeAggrGroupMaxSize();
+ protected int getMaxCombinations(CubeDesc cubeDesc) {
+ return cubeDesc.getConfig().getCubeAggrGroupMaxCombination();
}
}
http://git-wip-us.apache.org/repos/asf/kylin/blob/325803d2/core-cube/src/test/java/org/apache/kylin/cube/AggregationGroupRuleTest.java
----------------------------------------------------------------------
diff --git a/core-cube/src/test/java/org/apache/kylin/cube/AggregationGroupRuleTest.java b/core-cube/src/test/java/org/apache/kylin/cube/AggregationGroupRuleTest.java
index 6c3d544..a06ce1b 100644
--- a/core-cube/src/test/java/org/apache/kylin/cube/AggregationGroupRuleTest.java
+++ b/core-cube/src/test/java/org/apache/kylin/cube/AggregationGroupRuleTest.java
@@ -53,7 +53,7 @@ public class AggregationGroupRuleTest {
public void testGoodBecomeBadDesc() throws IOException {
AggregationGroupRule rule = new AggregationGroupRule() {
@Override
- protected int getMaxAgrGroupSize() {
+ protected int getMaxCombinations(CubeDesc cubeDesc) {
return 2;
}
};
@@ -65,7 +65,7 @@ public class AggregationGroupRuleTest {
rule.validate(desc, vContext);
vContext.print(System.out);
assertTrue(vContext.getResults().length > 0);
- assertEquals("Aggregation group 0 has too many dimensions", (vContext.getResults()[0].getMessage()));
+ assertEquals("Aggregation group 0 has too many combinations, use 'mandatory'/'hierarchy'/'joint' to optimize; or update 'kylin.cube.aggrgroup.max.combination' to a bigger value.", (vContext.getResults()[0].getMessage()));
}
}
@@ -118,8 +118,8 @@ public class AggregationGroupRuleTest {
public AggregationGroupRule getAggregationGroupRule() {
AggregationGroupRule rule = new AggregationGroupRule() {
@Override
- protected int getMaxAgrGroupSize() {
- return 20;
+ protected int getMaxCombinations(CubeDesc cubeDesc) {
+ return 4096;
}
};