Repository: kylin
Updated Branches:
  refs/heads/master e6a84c569 -> 809b78309


KYLIN-2282 Step name Build N-Dimension Cuboid Data : N-Dimension is inaccurate


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

Branch: refs/heads/master
Commit: 809b78309d0b85058aad43e6b863271dfebd1255
Parents: e043d5f
Author: shaofengshi <shaofeng...@apache.org>
Authored: Thu Jan 5 12:00:12 2017 +0800
Committer: shaofengshi <shaofeng...@apache.org>
Committed: Thu Jan 5 12:01:36 2017 +0800

----------------------------------------------------------------------
 .../kylin/engine/mr/BatchCubingJobBuilder.java  | 27 +++++++++----------
 .../kylin/engine/mr/BatchCubingJobBuilder2.java | 28 +++++++++-----------
 .../kylin/engine/mr/JobBuilderSupport.java      | 11 ++++----
 3 files changed, 30 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/809b7830/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder.java
----------------------------------------------------------------------
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder.java
index 6c973eb..8fbecd3 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder.java
@@ -63,16 +63,15 @@ public class BatchCubingJobBuilder extends 
JobBuilderSupport {
         result.addTask(createBuildDictionaryStep(jobId));
 
         // Phase 3: Build Cube
-        RowKeyDesc rowKeyDesc = ((CubeSegment) seg).getCubeDesc().getRowkey();
-        final int groupRowkeyColumnsCount = ((CubeSegment) 
seg).getCubeDesc().getBuildLevel();
+        RowKeyDesc rowKeyDesc = seg.getCubeDesc().getRowkey();
+        final int groupRowkeyColumnsCount = seg.getCubeDesc().getBuildLevel();
         final int totalRowkeyColumnsCount = 
rowKeyDesc.getRowKeyColumns().length;
-        final String[] cuboidOutputTempPath = 
getCuboidOutputPaths(cuboidRootPath, totalRowkeyColumnsCount, 
groupRowkeyColumnsCount);
+        final String[] cuboidOutputTempPath = 
getCuboidOutputPaths(cuboidRootPath, groupRowkeyColumnsCount);
         // base cuboid step
-        result.addTask(createBaseCuboidStep(cuboidOutputTempPath, jobId));
+        result.addTask(createBaseCuboidStep(cuboidOutputTempPath[0], jobId));
         // n dim cuboid steps
-        for (int i = 1; i <= groupRowkeyColumnsCount; i++) {
-            int dimNum = totalRowkeyColumnsCount - i;
-            result.addTask(createNDimensionCuboidStep(cuboidOutputTempPath, 
dimNum, totalRowkeyColumnsCount));
+        for (int i = 1; i < groupRowkeyColumnsCount; i++) {
+            result.addTask(createNDimensionCuboidStep(cuboidOutputTempPath[i - 
1], cuboidOutputTempPath[i], i));
         }
         outputSide.addStepPhase3_BuildCube(result, cuboidRootPath);
 
@@ -84,7 +83,7 @@ public class BatchCubingJobBuilder extends JobBuilderSupport {
         return result;
     }
 
-    private MapReduceExecutable createBaseCuboidStep(String[] 
cuboidOutputTempPath, String jobId) {
+    private MapReduceExecutable createBaseCuboidStep(String cuboidOutputPath, 
String jobId) {
         // base cuboid job
         MapReduceExecutable baseCuboidStep = new MapReduceExecutable();
 
@@ -96,7 +95,7 @@ public class BatchCubingJobBuilder extends JobBuilderSupport {
         appendExecCmdParameters(cmd, BatchConstants.ARG_CUBE_NAME, 
seg.getRealization().getName());
         appendExecCmdParameters(cmd, BatchConstants.ARG_SEGMENT_ID, 
seg.getUuid());
         appendExecCmdParameters(cmd, BatchConstants.ARG_INPUT, "FLAT_TABLE"); 
// marks flat table input
-        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, 
cuboidOutputTempPath[0]);
+        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, 
cuboidOutputPath);
         appendExecCmdParameters(cmd, BatchConstants.ARG_JOB_NAME, 
"Kylin_Base_Cuboid_Builder_" + seg.getRealization().getName());
         appendExecCmdParameters(cmd, BatchConstants.ARG_LEVEL, "0");
         appendExecCmdParameters(cmd, BatchConstants.ARG_CUBING_JOB_ID, jobId);
@@ -107,20 +106,20 @@ public class BatchCubingJobBuilder extends 
JobBuilderSupport {
         return baseCuboidStep;
     }
 
-    private MapReduceExecutable createNDimensionCuboidStep(String[] 
cuboidOutputTempPath, int dimNum, int totalRowkeyColumnCount) {
+    private MapReduceExecutable createNDimensionCuboidStep(String parentPath, 
String outputPath, int level) {
         // ND cuboid job
         MapReduceExecutable ndCuboidStep = new MapReduceExecutable();
 
-        ndCuboidStep.setName(ExecutableConstants.STEP_NAME_BUILD_N_D_CUBOID + 
" : " + dimNum + "-Dimension");
+        ndCuboidStep.setName(ExecutableConstants.STEP_NAME_BUILD_N_D_CUBOID + 
" : level " + level);
         StringBuilder cmd = new StringBuilder();
 
         appendMapReduceParameters(cmd);
         appendExecCmdParameters(cmd, BatchConstants.ARG_CUBE_NAME, 
seg.getRealization().getName());
         appendExecCmdParameters(cmd, BatchConstants.ARG_SEGMENT_ID, 
seg.getUuid());
-        appendExecCmdParameters(cmd, BatchConstants.ARG_INPUT, 
cuboidOutputTempPath[totalRowkeyColumnCount - dimNum - 1]);
-        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, 
cuboidOutputTempPath[totalRowkeyColumnCount - dimNum]);
+        appendExecCmdParameters(cmd, BatchConstants.ARG_INPUT, parentPath);
+        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, outputPath);
         appendExecCmdParameters(cmd, BatchConstants.ARG_JOB_NAME, 
"Kylin_ND-Cuboid_Builder_" + seg.getRealization().getName() + "_Step");
-        appendExecCmdParameters(cmd, BatchConstants.ARG_LEVEL, "" + 
(totalRowkeyColumnCount - dimNum));
+        appendExecCmdParameters(cmd, BatchConstants.ARG_LEVEL, "" + level);
 
         ndCuboidStep.setMapReduceParams(cmd.toString());
         ndCuboidStep.setMapReduceJobClass(NDCuboidJob.class);

http://git-wip-us.apache.org/repos/asf/kylin/blob/809b7830/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder2.java
----------------------------------------------------------------------
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder2.java
 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder2.java
index 966bb1b..20540a6 100644
--- 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder2.java
+++ 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/BatchCubingJobBuilder2.java
@@ -19,7 +19,6 @@
 package org.apache.kylin.engine.mr;
 
 import org.apache.kylin.cube.CubeSegment;
-import org.apache.kylin.cube.model.RowKeyDesc;
 import org.apache.kylin.engine.mr.IMRInput.IMRBatchCubingInputSide;
 import org.apache.kylin.engine.mr.IMROutput2.IMRBatchCubingOutputSide2;
 import org.apache.kylin.engine.mr.common.AbstractHadoopJob;
@@ -77,16 +76,13 @@ public class BatchCubingJobBuilder2 extends 
JobBuilderSupport {
     }
 
     private void addLayerCubingSteps(final CubingJob result, final String 
jobId, final String cuboidRootPath) {
-        RowKeyDesc rowKeyDesc = ((CubeSegment) seg).getCubeDesc().getRowkey();
-        final int groupRowkeyColumnsCount = ((CubeSegment) 
seg).getCubeDesc().getBuildLevel();
-        final int totalRowkeyColumnsCount = 
rowKeyDesc.getRowKeyColumns().length;
-        final String[] cuboidOutputTempPath = 
getCuboidOutputPaths(cuboidRootPath, totalRowkeyColumnsCount, 
groupRowkeyColumnsCount);
+        final int maxLevel = seg.getCubeDesc().getBuildLevel();
+        final String[] cuboidOutputTempPath = 
getCuboidOutputPaths(cuboidRootPath, maxLevel);
         // base cuboid step
-        result.addTask(createBaseCuboidStep(cuboidOutputTempPath, jobId));
+        result.addTask(createBaseCuboidStep(cuboidOutputTempPath[0], jobId));
         // n dim cuboid steps
-        for (int i = 1; i < groupRowkeyColumnsCount; i++) {
-            int dimNum = totalRowkeyColumnsCount - i;
-            result.addTask(createNDimensionCuboidStep(cuboidOutputTempPath, 
dimNum, totalRowkeyColumnsCount, jobId));
+        for (int i = 1; i < maxLevel; i++) {
+            result.addTask(createNDimensionCuboidStep(cuboidOutputTempPath[i - 
1], cuboidOutputTempPath[i], i, jobId));
         }
     }
 
@@ -125,7 +121,7 @@ public class BatchCubingJobBuilder2 extends 
JobBuilderSupport {
         return InMemCuboidJob.class;
     }
 
-    private MapReduceExecutable createBaseCuboidStep(String[] 
cuboidOutputTempPath, String jobId) {
+    private MapReduceExecutable createBaseCuboidStep(String cuboidOutputPath, 
String jobId) {
         // base cuboid job
         MapReduceExecutable baseCuboidStep = new MapReduceExecutable();
 
@@ -137,7 +133,7 @@ public class BatchCubingJobBuilder2 extends 
JobBuilderSupport {
         appendExecCmdParameters(cmd, BatchConstants.ARG_CUBE_NAME, 
seg.getRealization().getName());
         appendExecCmdParameters(cmd, BatchConstants.ARG_SEGMENT_ID, 
seg.getUuid());
         appendExecCmdParameters(cmd, BatchConstants.ARG_INPUT, "FLAT_TABLE"); 
// marks flat table input
-        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, 
cuboidOutputTempPath[0]);
+        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, 
cuboidOutputPath);
         appendExecCmdParameters(cmd, BatchConstants.ARG_JOB_NAME, 
"Kylin_Base_Cuboid_Builder_" + seg.getRealization().getName());
         appendExecCmdParameters(cmd, BatchConstants.ARG_LEVEL, "0");
         appendExecCmdParameters(cmd, BatchConstants.ARG_CUBING_JOB_ID, jobId);
@@ -152,20 +148,20 @@ public class BatchCubingJobBuilder2 extends 
JobBuilderSupport {
         return BaseCuboidJob.class;
     }
 
-    private MapReduceExecutable createNDimensionCuboidStep(String[] 
cuboidOutputTempPath, int dimNum, int totalRowkeyColumnCount, String jobId) {
+    private MapReduceExecutable createNDimensionCuboidStep(String parentPath, 
String outputPath, int level, String jobId) {
         // ND cuboid job
         MapReduceExecutable ndCuboidStep = new MapReduceExecutable();
 
-        ndCuboidStep.setName(ExecutableConstants.STEP_NAME_BUILD_N_D_CUBOID + 
" : " + dimNum + "-Dimension");
+        ndCuboidStep.setName(ExecutableConstants.STEP_NAME_BUILD_N_D_CUBOID + 
" : level " + level);
         StringBuilder cmd = new StringBuilder();
 
         appendMapReduceParameters(cmd);
         appendExecCmdParameters(cmd, BatchConstants.ARG_CUBE_NAME, 
seg.getRealization().getName());
         appendExecCmdParameters(cmd, BatchConstants.ARG_SEGMENT_ID, 
seg.getUuid());
-        appendExecCmdParameters(cmd, BatchConstants.ARG_INPUT, 
cuboidOutputTempPath[totalRowkeyColumnCount - dimNum - 1]);
-        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, 
cuboidOutputTempPath[totalRowkeyColumnCount - dimNum]);
+        appendExecCmdParameters(cmd, BatchConstants.ARG_INPUT, parentPath);
+        appendExecCmdParameters(cmd, BatchConstants.ARG_OUTPUT, outputPath);
         appendExecCmdParameters(cmd, BatchConstants.ARG_JOB_NAME, 
"Kylin_ND-Cuboid_Builder_" + seg.getRealization().getName() + "_Step");
-        appendExecCmdParameters(cmd, BatchConstants.ARG_LEVEL, "" + 
(totalRowkeyColumnCount - dimNum));
+        appendExecCmdParameters(cmd, BatchConstants.ARG_LEVEL, "" + level);
         appendExecCmdParameters(cmd, BatchConstants.ARG_CUBING_JOB_ID, jobId);
 
         ndCuboidStep.setMapReduceParams(cmd.toString());

http://git-wip-us.apache.org/repos/asf/kylin/blob/809b7830/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
----------------------------------------------------------------------
diff --git 
a/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java 
b/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
index 5f5814b..23fce2b 100644
--- a/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
+++ b/engine-mr/src/main/java/org/apache/kylin/engine/mr/JobBuilderSupport.java
@@ -192,14 +192,13 @@ public class JobBuilderSupport {
         return buf.append(" -").append(paraName).append(" ").append(paraValue);
     }
 
-    public String[] getCuboidOutputPaths(String cuboidRootPath, int 
totalRowkeyColumnCount, int groupRowkeyColumnsCount) {
-        String[] paths = new String[groupRowkeyColumnsCount + 1];
-        for (int i = 0; i <= groupRowkeyColumnsCount; i++) {
-            int dimNum = totalRowkeyColumnCount - i;
-            if (dimNum == totalRowkeyColumnCount) {
+    public String[] getCuboidOutputPaths(String cuboidRootPath, int levels) {
+        String[] paths = new String[levels];
+        for (int i = 0; i < levels; i++) {
+            if (i == 0) {
                 paths[i] = cuboidRootPath + "base_cuboid";
             } else {
-                paths[i] = cuboidRootPath + dimNum + "d_cuboid";
+                paths[i] = cuboidRootPath + "level_" + i + "_cuboid";
             }
         }
         return paths;

Reply via email to