From ad8fbf113a8ceea3cbf5a05f6634d0407997ae6d Mon Sep 17 00:00:00 2001 From: kangkaisen Date: Sun, 31 Dec 2017 16:51:05 +0800 Subject: [PATCH] KYLIN-3205 Allow one column is used for both dimension and precisely count distinct measure --- .../org/apache/kylin/cube/model/validation/rule/DictionaryRule.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java index 8da3ca04b..df1316d3f 100644 --- a/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/model/validation/rule/DictionaryRule.java @@ -26,6 +26,7 @@ import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.kylin.cube.model.CubeDesc; import org.apache.kylin.cube.model.DictionaryDesc; +import org.apache.kylin.cube.model.RowKeyDesc; import org.apache.kylin.cube.model.validation.IValidatorRule; import org.apache.kylin.cube.model.validation.ResultLevel; import org.apache.kylin.cube.model.validation.ValidateContext; @@ -46,12 +47,13 @@ public class DictionaryRule implements IValidatorRule { static final String ERROR_REUSE_BUILDER_BOTH_SET = "REUSE and BUILDER both set on dictionary for column: "; static final String ERROR_REUSE_BUILDER_BOTH_EMPTY = "REUSE and BUILDER both empty on dictionary for column: "; static final String ERROR_TRANSITIVE_REUSE = "Transitive REUSE is not allowed for dictionary: "; - static final String ERROR_GLOBAL_DICTIONNARY_ONLY_MEASURE = "Global dictionary couldn't be used for dimension column: "; + static final String ERROR_GLOBAL_DICTIONNARY_ONLY_MEASURE = "If one column is used for both dimension and precisely count distinct measure, its dimension encoding should not be dict: "; @Override public void validate(CubeDesc cubeDesc, ValidateContext context) { List dictDescs = cubeDesc.getDictionaries(); Set dimensionColumns = cubeDesc.listDimensionColumnsIncludingDerived(); + RowKeyDesc rowKeyDesc = cubeDesc.getRowkey(); if (dictDescs == null || dictDescs.isEmpty()) { return; @@ -82,7 +84,7 @@ public class DictionaryRule implements IValidatorRule { return; } - if (StringUtils.isNotEmpty(builderClass) && builderClass.equalsIgnoreCase(GlobalDictionaryBuilder.class.getName()) && dimensionColumns.contains(dictCol)) { + if (StringUtils.isNotEmpty(builderClass) && builderClass.equalsIgnoreCase(GlobalDictionaryBuilder.class.getName()) && dimensionColumns.contains(dictCol) && rowKeyDesc.isUseDictionary(dictCol)) { context.addResult(ResultLevel.ERROR, ERROR_GLOBAL_DICTIONNARY_ONLY_MEASURE + dictCol); return; } -- 2.14.3 (Apple Git-98)