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 <shaofeng...@apache.org> Authored: Thu Jan 5 13:49:08 2017 +0800 Committer: shaofengshi <shaofeng...@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);