You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ma...@apache.org on 2016/07/28 06:38:54 UTC
kylin git commit: KYLIN-1922 further refinement the check logic
Repository: kylin
Updated Branches:
refs/heads/beforepomupdate 97e67f0de -> d257d73bd
KYLIN-1922 further refinement the check logic
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/d257d73b
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/d257d73b
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/d257d73b
Branch: refs/heads/beforepomupdate
Commit: d257d73bdd9c1de5cfe4fa1d103eb50a03343bf2
Parents: 97e67f0
Author: Hongbin Ma <ma...@apache.org>
Authored: Thu Jul 28 14:38:39 2016 +0800
Committer: Hongbin Ma <ma...@apache.org>
Committed: Thu Jul 28 14:38:39 2016 +0800
----------------------------------------------------------------------
.../org/apache/kylin/storage/StorageContext.java | 10 +++++-----
.../storage/gtrecord/CubeSegmentScanner.java | 2 +-
.../storage/gtrecord/GTCubeStorageQueryBase.java | 18 +++++++++++++-----
3 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/kylin/blob/d257d73b/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
----------------------------------------------------------------------
diff --git a/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java b/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
index aad37ce..90a2e43 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/StorageContext.java
@@ -39,7 +39,7 @@ public class StorageContext {
private boolean acceptPartialResult;
private boolean exactAggregation;
- private boolean groupingByAllCuboidDimensions;
+ private boolean needStorageAggregation;
private boolean enableLimit;
private boolean enableCoprocessor;
@@ -144,12 +144,12 @@ public class StorageContext {
this.partialResultReturned = partialResultReturned;
}
- public boolean isGroupingByAllCuboidDimensions() {
- return groupingByAllCuboidDimensions;
+ public boolean isNeedStorageAggregation() {
+ return needStorageAggregation;
}
- public void setGroupingByAllCuboidDimensions(boolean groupingByAllCuboidDimensions) {
- this.groupingByAllCuboidDimensions = groupingByAllCuboidDimensions;
+ public void setNeedStorageAggregation(boolean needStorageAggregation) {
+ this.needStorageAggregation = needStorageAggregation;
}
public void setExactAggregation(boolean isExactAggregation) {
http://git-wip-us.apache.org/repos/asf/kylin/blob/d257d73b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
----------------------------------------------------------------------
diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
index 21cebc1..cb3bc3b 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/CubeSegmentScanner.java
@@ -69,7 +69,7 @@ public class CubeSegmentScanner implements IGTScanner {
}
scanRequest = scanRangePlanner.planScanRequest();
if (scanRequest != null) {
- scanRequest.setAllowPreAggregation(!context.isGroupingByAllCuboidDimensions());
+ scanRequest.setAllowPreAggregation(!context.isNeedStorageAggregation());
scanRequest.setAggrCacheGB(cubeSeg.getCubeInstance().getConfig().getQueryCoprocessorMemGB());
if (context.isLimitEnabled())
scanRequest.setRowLimit(context.getLimit());
http://git-wip-us.apache.org/repos/asf/kylin/blob/d257d73b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
----------------------------------------------------------------------
diff --git a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
index d03cfc6..fc145e6 100644
--- a/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
+++ b/core-storage/src/main/java/org/apache/kylin/storage/gtrecord/GTCubeStorageQueryBase.java
@@ -20,6 +20,7 @@ package org.apache.kylin.storage.gtrecord;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -100,7 +101,7 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery {
// isExactAggregation? meaning: tuples returned from storage requires no further aggregation in query engine
Set<TblColRef> singleValuesD = findSingleValueColumns(filter);
context.setExactAggregation(isExactAggregation(cuboid, groups, otherDimsD, singleValuesD, derivedPostAggregation));
- context.setGroupingByAllCuboidDimensions(isGroupingByAllCuboidDimensions(cuboid, groupsD));
+ context.setNeedStorageAggregation(isNeedStorageAggregation(cuboid, groupsD, singleValuesD));
// replace derived columns in filter with host columns; columns on loosened condition must be added to group by
TupleFilter filterD = translateDerived(filter, groupsD);
@@ -221,12 +222,19 @@ public abstract class GTCubeStorageQueryBase implements IStorageQuery {
return resultD;
}
- private boolean isGroupingByAllCuboidDimensions(Cuboid cuboid, Collection<TblColRef> groupD) {
- if (cuboid.getColumns().size() != groupD.size()) {
+ private boolean isNeedStorageAggregation(Cuboid cuboid, Collection<TblColRef> groupD, Collection<TblColRef> singleValueD) {
+
+ logger.info("GroupD :" + groupD);
+ logger.info("SingleValueD :" + singleValueD);
+ logger.info("Cuboid columns :" + cuboid.getColumns());
+ HashSet<TblColRef> temp = Sets.newHashSet();
+ temp.addAll(groupD);
+ temp.addAll(singleValueD);
+ if (cuboid.getColumns().size() != temp.size()) {
return false;
+ } else {
+ return true;
}
-
- return groupD.containsAll(cuboid.getColumns());
}
private boolean isExactAggregation(Cuboid cuboid, Collection<TblColRef> groups, Set<TblColRef> othersD, Set<TblColRef> singleValuesD, Set<TblColRef> derivedPostAggregation) {