KYLIN-2024 kylin TopN only support the first measure
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1d8e8e53 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1d8e8e53 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1d8e8e53 Branch: refs/heads/v1.6.0-rc1-hbase1.x Commit: 1d8e8e5389dae3960d9540dea68321a0f8b0cfb8 Parents: eaaaf2f Author: shaofengshi <shaofeng...@apache.org> Authored: Wed Nov 2 13:20:10 2016 +0800 Committer: shaofengshi <shaofeng...@apache.org> Committed: Wed Nov 2 13:42:06 2016 +0800 ---------------------------------------------------------------------- .../kylin/measure/topn/TopNMeasureType.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/1d8e8e53/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 8c98672..7e788e4 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 @@ -39,8 +39,8 @@ import org.apache.kylin.metadata.datatype.DataTypeSerializer; import org.apache.kylin.metadata.model.FunctionDesc; import org.apache.kylin.metadata.model.MeasureDesc; import org.apache.kylin.metadata.model.TblColRef; -import org.apache.kylin.metadata.realization.SQLDigest; import org.apache.kylin.metadata.realization.CapabilityResult.CapabilityInfluence; +import org.apache.kylin.metadata.realization.SQLDigest; import org.apache.kylin.metadata.tuple.Tuple; import org.apache.kylin.metadata.tuple.TupleInfo; import org.slf4j.Logger; @@ -307,15 +307,16 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> { @Override public void adjustSqlDigest(List<MeasureDesc> measureDescs, SQLDigest sqlDigest) { + if (sqlDigest.aggregations.size() > 1) { + return; + } + for (MeasureDesc measureDesc : measureDescs) { FunctionDesc topnFunc = measureDesc.getFunction(); List<TblColRef> topnLiteralCol = getTopNLiteralColumn(topnFunc); - if (sqlDigest.groupbyColumns.containsAll(topnLiteralCol) == false) - return; - - if (sqlDigest.aggregations.size() > 1) { - return; + if (sqlDigest.groupbyColumns.containsAll(topnLiteralCol) == false) { + continue; } if (sqlDigest.aggregations.size() > 0) { @@ -324,12 +325,18 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> { logger.warn("When query with topN, only SUM/Count function is allowed."); return; } + + if (isTopNCompatibleSum(measureDesc.getFunction(), origFunc) == false) { + continue; + } + logger.info("Rewrite function " + origFunc + " to " + topnFunc); } sqlDigest.aggregations = Lists.newArrayList(topnFunc); sqlDigest.groupbyColumns.removeAll(topnLiteralCol); sqlDigest.metricColumns.addAll(topnLiteralCol); + break; } }