You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ni...@apache.org on 2019/06/25 03:58:23 UTC
[kylin] branch 2.6.x updated: KYLIN-2620 TopN can't match when
multi sort columns
This is an automated email from the ASF dual-hosted git repository.
nic pushed a commit to branch 2.6.x
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/2.6.x by this push:
new 2bfda2d KYLIN-2620 TopN can't match when multi sort columns
2bfda2d is described below
commit 2bfda2d6c2a19586d0854e487bd3ceb805922940
Author: chao long <wa...@qq.com>
AuthorDate: Sun May 19 18:45:37 2019 +0800
KYLIN-2620 TopN can't match when multi sort columns
---
.../apache/kylin/measure/topn/TopNMeasureType.java | 34 ++++++++++++++--------
1 file changed, 22 insertions(+), 12 deletions(-)
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 194ba36..472de3c 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
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.kylin.common.util.ByteArray;
import org.apache.kylin.common.util.Dictionary;
@@ -332,23 +333,32 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> {
return null;
}
- private boolean hasOneElement(List<? extends Object> list) {
- return list != null && list.size() == 1;
+ private boolean checkSortAndOrder(List<TblColRef> sort, List<SQLDigest.OrderEnum> order) {
+ return CollectionUtils.isNotEmpty(sort) && CollectionUtils.isNotEmpty(order) && sort.size() == order.size();
}
private boolean totallyMatchTopN(SQLDigest digest) {
- boolean sortColumnMatch = false;
- if (hasOneElement(digest.sortColumns)) {
- TblColRef sortColumn = digest.sortColumns.get(0);
- if (!digest.groupbyColumns.contains(sortColumn)) {
- // only have one aggregation
- sortColumnMatch = sortColumn.getColumnDesc().getZeroBasedIndex() == 0;
- }
+ if (!checkSortAndOrder(digest.sortColumns, digest.sortOrders)) {
+ return false;
}
- return sortColumnMatch
- && hasOneElement(digest.sortOrders) && DESCENDING.equals(digest.sortOrders.get(0))
- && digest.hasLimit;
+ TblColRef sortColumn = digest.sortColumns.get(0);
+
+ // first sort column must be sum()
+ if (digest.groupbyColumns.contains(sortColumn)) {
+ return false;
+ }
+
+ // first order must be desc
+ if (!DESCENDING.equals(digest.sortOrders.get(0))) {
+ return false;
+ }
+
+ if (!digest.hasLimit) {
+ return false;
+ }
+
+ return true;
}
private boolean isTopNCompatibleSum(FunctionDesc topN, FunctionDesc sum) {