KYLIN-2543 Still build dictionary for TopN group, fix IT
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/75d50ae9 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/75d50ae9 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/75d50ae9 Branch: refs/heads/master-hbase0.98 Commit: 75d50ae97a5ee877acace8cb0e8b4557013b3702 Parents: 821f59b Author: shaofengshi <shaofeng...@apache.org> Authored: Fri Apr 14 10:32:48 2017 +0800 Committer: shaofengshi <shaofeng...@apache.org> Committed: Fri Apr 14 10:33:20 2017 +0800 ---------------------------------------------------------------------- .../metadata/measure/TopNMeasureTypeTest.java | 2 +- .../kylin/measure/topn/TopNMeasureType.java | 32 +++++++++++++++----- 2 files changed, 26 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/75d50ae9/core-cube/src/test/java/org/apache/kylin/metadata/measure/TopNMeasureTypeTest.java ---------------------------------------------------------------------- diff --git a/core-cube/src/test/java/org/apache/kylin/metadata/measure/TopNMeasureTypeTest.java b/core-cube/src/test/java/org/apache/kylin/metadata/measure/TopNMeasureTypeTest.java index 593eb6e..f04c742 100644 --- a/core-cube/src/test/java/org/apache/kylin/metadata/measure/TopNMeasureTypeTest.java +++ b/core-cube/src/test/java/org/apache/kylin/metadata/measure/TopNMeasureTypeTest.java @@ -69,7 +69,7 @@ public class TopNMeasureTypeTest extends LocalFileMetadataTestCase { assertTrue(colsNeedDict != null && colsNeedDict.size() == 1); TblColRef sellerColRef = topSellerMeasure.getFunction().getParameter().getColRefs().get(1); - topSellerMeasure.getFunction().getConfiguration().put(TopNMeasureType.CONFIG_ENCODING_PREFIX + sellerColRef.getName(), "int:6"); + topSellerMeasure.getFunction().getConfiguration().put(TopNMeasureType.CONFIG_ENCODING_PREFIX + sellerColRef.getIdentity(), "int:6"); colsNeedDict = measureType.getColumnsNeedDictionary(topSellerMeasure.getFunction()); assertTrue(colsNeedDict.size() == 0); http://git-wip-us.apache.org/repos/asf/kylin/blob/75d50ae9/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java index f90aab2..f936cb8 100644 --- a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java +++ b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java @@ -27,6 +27,7 @@ import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.util.ByteArray; import org.apache.kylin.common.util.Dictionary; +import org.apache.kylin.common.util.Pair; import org.apache.kylin.dimension.DateDimEnc; import org.apache.kylin.dimension.DictionaryDimEnc; import org.apache.kylin.dimension.DimensionEncoding; @@ -221,11 +222,7 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> { int start = (functionDesc.getParameter().isColumnType() == true) ? 1 : 0; for (int i = start; i < allCols.size(); i++) { TblColRef tblColRef = allCols.get(i); - String encoding = functionDesc.getConfiguration().get(CONFIG_ENCODING_PREFIX + tblColRef.getIdentity()); - if (StringUtils.isEmpty(encoding)) { - // for backward compatibility - encoding = functionDesc.getConfiguration().get(CONFIG_ENCODING_PREFIX + tblColRef.getName()); - } + String encoding = getEncoding(functionDesc, tblColRef).getFirst(); if (StringUtils.isEmpty(encoding) || DictionaryDimEnc.ENCODING_NAME.equals(encoding)) { columnsNeedDict.add(tblColRef); } @@ -415,8 +412,10 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> { final DimensionEncoding[] dimensionEncodings = new DimensionEncoding[literalCols.size()]; for (int i = 0; i < literalCols.size(); i++) { TblColRef colRef = literalCols.get(i); - String encoding = function.getConfiguration().get(TopNMeasureType.CONFIG_ENCODING_PREFIX + colRef.getName()); - String encodingVersionStr = function.getConfiguration().get(TopNMeasureType.CONFIG_ENCODING_VERSION_PREFIX + colRef.getName()); + + Pair<String, String> topNEncoding = TopNMeasureType.getEncoding(function, colRef); + String encoding = topNEncoding.getFirst(); + String encodingVersionStr = topNEncoding.getSecond(); if (StringUtils.isEmpty(encoding) || DictionaryDimEnc.ENCODING_NAME.equals(encoding)) { dimensionEncodings[i] = new DictionaryDimEnc(dictionaryMap.get(colRef)); } else { @@ -460,4 +459,23 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> { return FUNC_TOP_N.equalsIgnoreCase(functionDesc.getExpression()); } + + /** + * Get the encoding name and version for the given col from Measure FunctionDesc + * @param functionDesc + * @param tblColRef + * @return a pair of the encoding name and encoding version + */ + public static final Pair<String, String> getEncoding(FunctionDesc functionDesc, TblColRef tblColRef) { + String encoding = functionDesc.getConfiguration().get(CONFIG_ENCODING_PREFIX + tblColRef.getIdentity()); + String encodingVersion =functionDesc.getConfiguration().get(CONFIG_ENCODING_VERSION_PREFIX + tblColRef.getIdentity()); + if (StringUtils.isEmpty(encoding)) { + // for backward compatibility + encoding = functionDesc.getConfiguration().get(CONFIG_ENCODING_PREFIX + tblColRef.getName()); + encodingVersion =functionDesc.getConfiguration().get(CONFIG_ENCODING_VERSION_PREFIX + tblColRef.getName()); + } + + return new Pair<>(encoding, encodingVersion); + } + }