Repository: kylin Updated Branches: refs/heads/master dd855a512 -> 34ac81fb0
KYLIN-1622 fix the validation check for topN query Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/34ac81fb Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/34ac81fb Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/34ac81fb Branch: refs/heads/master Commit: 34ac81fb00e0056877cfe6bf5220d1ea79bfe70e Parents: dd855a5 Author: shaofengshi <shaofeng...@apache.org> Authored: Wed Apr 27 14:33:12 2016 +0800 Committer: shaofengshi <shaofeng...@apache.org> Committed: Wed Apr 27 14:33:12 2016 +0800 ---------------------------------------------------------------------- .../apache/kylin/measure/topn/TopNMeasureType.java | 12 +++++++----- .../metadata/cube_desc/kylin_sales_cube_desc.json | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/34ac81fb/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 507a2b0..093afa0 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 @@ -234,19 +234,21 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> { if (sqlDigest.groupbyColumns.contains(topnLiteralCol) == false) return; - if (sqlDigest.aggregations.size() != 1) { + if (sqlDigest.aggregations.size() > 1) { throw new IllegalStateException("When query with topN, only one metrics is allowed."); } - FunctionDesc origFunc = sqlDigest.aggregations.iterator().next(); - if (origFunc.isSum() == false) { - throw new IllegalStateException("When query with topN, only SUM function is allowed."); + if (sqlDigest.aggregations.size() > 0) { + FunctionDesc origFunc = sqlDigest.aggregations.iterator().next(); + if (origFunc.isSum() == false) { + throw new IllegalStateException("When query with topN, only SUM function is allowed."); + } + logger.info("Rewrite function " + origFunc + " to " + topnFunc); } sqlDigest.aggregations = Lists.newArrayList(topnFunc); sqlDigest.groupbyColumns.remove(topnLiteralCol); sqlDigest.metricColumns.add(topnLiteralCol); - logger.info("Rewrite function " + origFunc + " to " + topnFunc); } @Override http://git-wip-us.apache.org/repos/asf/kylin/blob/34ac81fb/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json ---------------------------------------------------------------------- diff --git a/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json b/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json index c7d1a13..be1b7a9 100644 --- a/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json +++ b/examples/sample_cube/metadata/cube_desc/kylin_sales_cube_desc.json @@ -106,6 +106,22 @@ "returntype" : "hllc(10)" }, "dependent_measure_ref" : null + }, { + "name": "TOP_SELLER", + "function": { + "expression": "TOP_N", + "parameter": { + "type": "column", + "value": "PRICE", + "next_parameter": { + "type": "column", + "value": "SELLER_ID", + "next_parameter": null + } + }, + "returntype": "topn(100)" + }, + "dependent_measure_ref": null } ], "rowkey" : { "rowkey_columns" : [ {