Repository: kylin
Updated Branches:
  refs/heads/master 5042a30bc -> f3a33673f


KYLIN-1585 make MAX_HBASE_FUZZY_KEYS in GTScanRangePlanner configurable


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/f3a33673
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/f3a33673
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/f3a33673

Branch: refs/heads/master
Commit: f3a33673fcc39e3673a1b1e712fb44fcf781d8f5
Parents: 5042a30
Author: Hongbin Ma <mahong...@apache.org>
Authored: Thu Apr 14 15:06:31 2016 +0800
Committer: Hongbin Ma <mahong...@apache.org>
Committed: Thu Apr 14 15:06:31 2016 +0800

----------------------------------------------------------------------
 .../kylin/gridtable/GTScanRangePlanner.java     | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/f3a33673/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRangePlanner.java
----------------------------------------------------------------------
diff --git 
a/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRangePlanner.java 
b/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRangePlanner.java
index 479064c..baf3428 100644
--- a/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRangePlanner.java
+++ b/core-cube/src/main/java/org/apache/kylin/gridtable/GTScanRangePlanner.java
@@ -63,9 +63,8 @@ public class GTScanRangePlanner {
 
     private static final Logger logger = 
LoggerFactory.getLogger(GTScanRangePlanner.class);
 
-    private static final int MAX_HBASE_FUZZY_KEYS = 100;
-
     protected int maxScanRanges;
+    protected int maxFuzzyKeys;
 
     //non-GT
     protected CubeSegment cubeSegment;
@@ -93,7 +92,8 @@ public class GTScanRangePlanner {
     public GTScanRangePlanner(CubeSegment cubeSegment, Cuboid cuboid, 
TupleFilter filter, Set<TblColRef> dimensions, Set<TblColRef> groupbyDims, //
             Collection<FunctionDesc> metrics) {
 
-        this.maxScanRanges = 
KylinConfig.getInstanceFromEnv().getQueryScanFuzzyKeyMax();
+        this.maxScanRanges = 
KylinConfig.getInstanceFromEnv().getQueryStorageVisitScanRangeMax();
+        this.maxFuzzyKeys = 
KylinConfig.getInstanceFromEnv().getQueryScanFuzzyKeyMax();
 
         this.cubeSegment = cubeSegment;
         this.cubeDesc = cubeSegment.getCubeDesc();
@@ -143,7 +143,9 @@ public class GTScanRangePlanner {
      */
     public GTScanRangePlanner(GTInfo info, Pair<ByteArray, ByteArray> 
gtStartAndEnd, TblColRef gtPartitionCol, TupleFilter gtFilter) {
 
-        this.maxScanRanges = 
KylinConfig.getInstanceFromEnv().getQueryScanFuzzyKeyMax();
+        this.maxScanRanges = 
KylinConfig.getInstanceFromEnv().getQueryStorageVisitScanRangeMax();
+        this.maxFuzzyKeys = 
KylinConfig.getInstanceFromEnv().getQueryScanFuzzyKeyMax();
+        
         this.gtInfo = info;
 
         IGTComparator comp = gtInfo.codeSystem.getComparator();
@@ -154,11 +156,13 @@ public class GTScanRangePlanner {
         //start key GTRecord compare to stop key GTRecord
         this.rangeStartEndComparator = getRangeStartEndComparator(comp);
 
+
         this.gtFilter = gtFilter;
         this.gtStartAndEnd = gtStartAndEnd;
         this.gtPartitionCol = gtPartitionCol;
     }
 
+
     public GTScanRequest planScanRequest(boolean allowPreAggregate) {
         GTScanRequest scanRequest;
         List<GTScanRange> scanRanges = this.planScanRanges();
@@ -308,8 +312,8 @@ public class GTScanRangePlanner {
             if (gtPartitionCol != null && range.column.equals(gtPartitionCol)) 
{
                 if 
(rangeStartEndComparator.comparator.compare(gtStartAndEnd.getFirst(), 
range.end) <= 0 //
                         && 
(rangeStartEndComparator.comparator.compare(range.begin, 
gtStartAndEnd.getSecond()) < 0 //
-                                || 
rangeStartEndComparator.comparator.compare(range.begin, 
gtStartAndEnd.getSecond()) == 0 //
-                                        && (range.op == FilterOperatorEnum.EQ 
|| range.op == FilterOperatorEnum.LTE || range.op == FilterOperatorEnum.GTE || 
range.op == FilterOperatorEnum.IN))) {
+                        || 
rangeStartEndComparator.comparator.compare(range.begin, 
gtStartAndEnd.getSecond()) == 0 //
+                        && (range.op == FilterOperatorEnum.EQ || range.op == 
FilterOperatorEnum.LTE || range.op == FilterOperatorEnum.GTE || range.op == 
FilterOperatorEnum.IN))) {
                     //segment range is [Closed,Open), but 
segmentStartAndEnd.getSecond() might be rounded, so use <= when has equals in 
condition. 
                 } else {
                     logger.debug("Pre-check partition col filter failed, 
partitionColRef {}, segment start {}, segment end {}, range begin {}, range end 
{}", //
@@ -346,7 +350,7 @@ public class GTScanRangePlanner {
             return result;
         }
 
-        List<Map<Integer, ByteArray>> fuzzyValueCombinations = 
FuzzyValueCombination.calculate(fuzzyValueSet, MAX_HBASE_FUZZY_KEYS);
+        List<Map<Integer, ByteArray>> fuzzyValueCombinations = 
FuzzyValueCombination.calculate(fuzzyValueSet, maxFuzzyKeys);
 
         for (Map<Integer, ByteArray> fuzzyValue : fuzzyValueCombinations) {
 
@@ -522,7 +526,7 @@ public class GTScanRangePlanner {
 
         // if any range is non-fuzzy, then all fuzzy keys must be cleared
         // also too many fuzzy keys will slow down HBase scan
-        if (hasNonFuzzyRange || newFuzzyKeys.size() > MAX_HBASE_FUZZY_KEYS) {
+        if (hasNonFuzzyRange || newFuzzyKeys.size() > maxFuzzyKeys) {
             newFuzzyKeys.clear();
         }
 

Reply via email to