You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/01/12 04:09:34 UTC

[02/50] [abbrv] kylin git commit: KYLIN-2358 CuboidReducer has too many if (aggrMask[i]) checks

KYLIN-2358 CuboidReducer has too many if (aggrMask[i]) checks


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

Branch: refs/heads/master-cdh5.7
Commit: 4b5257a1dc4b1cf90804e5273f27944de30b8fbf
Parents: 9c98574
Author: shaofengshi <sh...@apache.org>
Authored: Thu Jan 5 13:49:08 2017 +0800
Committer: shaofengshi <sh...@apache.org>
Committed: Thu Jan 5 13:49:08 2017 +0800

----------------------------------------------------------------------
 .../kylin/measure/MeasureAggregators.java       |  9 +++----
 .../kylin/engine/mr/steps/CuboidReducer.java    | 26 ++++++++++++--------
 2 files changed, 19 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/4b5257a1/core-metadata/src/main/java/org/apache/kylin/measure/MeasureAggregators.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/MeasureAggregators.java b/core-metadata/src/main/java/org/apache/kylin/measure/MeasureAggregators.java
index 2b28302..8951b69 100644
--- a/core-metadata/src/main/java/org/apache/kylin/measure/MeasureAggregators.java
+++ b/core-metadata/src/main/java/org/apache/kylin/measure/MeasureAggregators.java
@@ -77,13 +77,10 @@ public class MeasureAggregators implements Serializable {
         }
     }
 
-    public void aggregate(Object[] values, boolean[] aggrMask) {
+    public void aggregate(Object[] values, int[] measures) {
         assert values.length == descLength;
-        assert aggrMask.length == descLength;
-
-        for (int i = 0; i < descLength; i++) {
-            if (aggrMask[i])
-                aggs[i].aggregate(values[i]);
+        for (int i = 0; i < measures.length; i++) {
+            aggs[measures[i]].aggregate(values[measures[i]]);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/kylin/blob/4b5257a1/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/CuboidReducer.java
----------------------------------------------------------------------
diff --git a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/CuboidReducer.java b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/CuboidReducer.java
index afd29e3..495be77 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/CuboidReducer.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/steps/CuboidReducer.java
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.List;
 
+import com.google.common.collect.Lists;
 import org.apache.hadoop.io.Text;
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.cube.CubeManager;
@@ -51,7 +52,7 @@ public class CuboidReducer extends KylinReducer<Text, Text, Text, Text> {
     private MeasureAggregators aggs;
 
     private int cuboidLevel;
-    private boolean[] needAggr;
+    private int[] needAggrMeasures;
     private Object[] input;
     private Object[] result;
     private int vcounter;
@@ -76,13 +77,22 @@ public class CuboidReducer extends KylinReducer<Text, Text, Text, Text> {
 
         input = new Object[measuresDescs.size()];
         result = new Object[measuresDescs.size()];
-        needAggr = new boolean[measuresDescs.size()];
 
-        if (cuboidLevel > 0) {
-            for (int i = 0; i < measuresDescs.size(); i++) {
-                needAggr[i] = !measuresDescs.get(i).getFunction().getMeasureType().onlyAggrInBaseCuboid();
+        List<Integer> needAggMeasuresList = Lists.newArrayList();
+        for (int i = 0; i < measuresDescs.size(); i++) {
+            if (cuboidLevel == 0) {
+                needAggMeasuresList.add(i);
+            } else {
+                if (!measuresDescs.get(i).getFunction().getMeasureType().onlyAggrInBaseCuboid()) {
+                    needAggMeasuresList.add(i);
+                }
             }
         }
+
+        needAggrMeasures = new int[needAggMeasuresList.size()];
+        for (int i = 0; i < needAggMeasuresList.size(); i++) {
+            needAggrMeasures[i] = needAggMeasuresList.get(i);
+        }
     }
 
     @Override
@@ -94,11 +104,7 @@ public class CuboidReducer extends KylinReducer<Text, Text, Text, Text> {
                 logger.info("Handling value with ordinal (This is not KV number!): " + vcounter);
             }
             codec.decode(ByteBuffer.wrap(value.getBytes(), 0, value.getLength()), input);
-            if (cuboidLevel > 0) {
-                aggs.aggregate(input, needAggr);
-            } else {
-                aggs.aggregate(input);
-            }
+            aggs.aggregate(input, needAggrMeasures);
         }
         aggs.collectStates(result);