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/12/31 13:20:00 UTC

[43/50] [abbrv] kylin git commit: Expose derived dimensions for get sql api

Expose derived dimensions for get sql api


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

Branch: refs/heads/master
Commit: 7889cec6794a6dda7ba6151feb5e9f9b2378cb7e
Parents: a6d1ab0
Author: nichunen <ch...@kyligence.io>
Authored: Thu Dec 28 21:36:13 2017 +0800
Committer: Li Yang <li...@apache.org>
Committed: Thu Dec 28 22:05:18 2017 -0600

----------------------------------------------------------------------
 .../cube/model/CubeJoinedFlatTableDesc.java     | 30 +++++++++++++++-----
 .../kylin/rest/controller/CubeController.java   |  4 +--
 .../rest/controller/CubeControllerTest.java     | 17 +++++++++++
 3 files changed, 42 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/7889cec6/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
index f8b039a..81087f8 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/model/CubeJoinedFlatTableDesc.java
@@ -44,23 +44,31 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc, Serializab
     protected final String tableName;
     protected final CubeDesc cubeDesc;
     protected final CubeSegment cubeSegment;
+    protected final boolean includingDerived;
 
     private int columnCount = 0;
     private List<TblColRef> columnList = Lists.newArrayList();
     private Map<TblColRef, Integer> columnIndexMap = Maps.newHashMap();
 
     public CubeJoinedFlatTableDesc(CubeDesc cubeDesc) {
-        this(cubeDesc, null);
+        this(cubeDesc, null, false);
+    }
+
+    public CubeJoinedFlatTableDesc(CubeDesc cubeDesc, boolean includingDerived) {
+        this(cubeDesc, null, includingDerived);
     }
 
     public CubeJoinedFlatTableDesc(CubeSegment cubeSegment) {
-        this(cubeSegment.getCubeDesc(), cubeSegment);
+        this(cubeSegment.getCubeDesc(), cubeSegment, false);
     }
 
-    private CubeJoinedFlatTableDesc(CubeDesc cubeDesc, CubeSegment cubeSegment /* can be null */) {
+    private CubeJoinedFlatTableDesc(CubeDesc cubeDesc, CubeSegment cubeSegment /* can be null */,
+            boolean includingDerived) {
         this.cubeDesc = cubeDesc;
         this.cubeSegment = cubeSegment;
+
         this.tableName = makeTableName(cubeDesc, cubeSegment);
+        this.includingDerived = includingDerived;
         initParseCubeDesc();
     }
 
@@ -68,7 +76,8 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc, Serializab
         if (cubeSegment == null) {
             return "kylin_intermediate_" + cubeDesc.getName().toLowerCase();
         } else {
-            return "kylin_intermediate_" + cubeDesc.getName().toLowerCase() + "_" + cubeSegment.getUuid().replaceAll("-", "_");
+            return "kylin_intermediate_" + cubeDesc.getName().toLowerCase() + "_"
+                    + cubeSegment.getUuid().replaceAll("-", "_");
         }
     }
 
@@ -86,8 +95,14 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc, Serializab
 
     // check what columns from hive tables are required, and index them
     protected void initParseCubeDesc() {
-        for (TblColRef col : cubeDesc.listDimensionColumnsExcludingDerived(false)) {
-            initAddColumn(col);
+        if (this.includingDerived) {
+            for (TblColRef col : cubeDesc.listDimensionColumnsIncludingDerived()) {
+                initAddColumn(col);
+            }
+        } else {
+            for (TblColRef col : cubeDesc.listDimensionColumnsExcludingDerived(false)) {
+                initAddColumn(col);
+            }
         }
 
         List<MeasureDesc> measures = cubeDesc.getMeasures();
@@ -118,7 +133,8 @@ public class CubeJoinedFlatTableDesc implements IJoinedFlatTableDesc, Serializab
     // sanity check the input record (in bytes) matches what's expected
     public void sanityCheck(BytesSplitter bytesSplitter) {
         if (columnCount != bytesSplitter.getBufferSize()) {
-            throw new IllegalArgumentException("Expect " + columnCount + " columns, but see " + bytesSplitter.getBufferSize() + " -- " + bytesSplitter);
+            throw new IllegalArgumentException("Expect " + columnCount + " columns, but see "
+                    + bytesSplitter.getBufferSize() + " -- " + bytesSplitter);
         }
 
         // TODO: check data types here

http://git-wip-us.apache.org/repos/asf/kylin/blob/7889cec6/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
----------------------------------------------------------------------
diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
index 5a48b8b..132f373 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/controller/CubeController.java
@@ -35,8 +35,8 @@ import org.apache.kylin.cube.CubeManager;
 import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.cube.model.CubeBuildTypeEnum;
 import org.apache.kylin.cube.model.CubeDesc;
+import org.apache.kylin.cube.model.CubeJoinedFlatTableDesc;
 import org.apache.kylin.dimension.DimensionEncodingFactory;
-import org.apache.kylin.engine.EngineFactory;
 import org.apache.kylin.job.JobInstance;
 import org.apache.kylin.job.JoinedFlatTable;
 import org.apache.kylin.metadata.model.IJoinedFlatTableDesc;
@@ -176,7 +176,7 @@ public class CubeController extends BasicController {
     @ResponseBody
     public GeneralResponse getSql(@PathVariable String cubeName, @PathVariable String segmentName) {
         CubeInstance cube = cubeService.getCubeManager().getCube(cubeName);
-        IJoinedFlatTableDesc flatTableDesc = EngineFactory.getJoinedFlatTableDesc(cube.getDescriptor());
+        IJoinedFlatTableDesc flatTableDesc = new CubeJoinedFlatTableDesc(cube.getDescriptor(), true);
         String sql = JoinedFlatTable.generateSelectDataStatement(flatTableDesc);
 
         GeneralResponse response = new GeneralResponse();

http://git-wip-us.apache.org/repos/asf/kylin/blob/7889cec6/server/src/test/java/org/apache/kylin/rest/controller/CubeControllerTest.java
----------------------------------------------------------------------
diff --git a/server/src/test/java/org/apache/kylin/rest/controller/CubeControllerTest.java b/server/src/test/java/org/apache/kylin/rest/controller/CubeControllerTest.java
index 697f4e6..dddc790 100644
--- a/server/src/test/java/org/apache/kylin/rest/controller/CubeControllerTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/controller/CubeControllerTest.java
@@ -25,10 +25,12 @@ import java.util.List;
 import org.apache.kylin.cube.CubeInstance;
 import org.apache.kylin.cube.CubeSegment;
 import org.apache.kylin.cube.model.CubeDesc;
+import org.apache.kylin.cube.model.DimensionDesc;
 import org.apache.kylin.metadata.model.SegmentRange.TSRange;
 import org.apache.kylin.rest.exception.InternalErrorException;
 import org.apache.kylin.rest.request.CubeRequest;
 import org.apache.kylin.rest.response.CubeInstanceResponse;
+import org.apache.kylin.rest.response.GeneralResponse;
 import org.apache.kylin.rest.service.CubeService;
 import org.apache.kylin.rest.service.JobService;
 import org.apache.kylin.rest.service.ServiceTestBase;
@@ -200,4 +202,19 @@ public class CubeControllerTest extends ServiceTestBase {
         Assert.assertTrue(cubes.size() == 1);
     }
 
+    @Test
+    public void testGetSql() {
+        GeneralResponse response = cubeController.getSql("test_kylin_cube_with_slr_ready", null);
+        String sql = response.getProperty("sql");
+        CubeDesc cubeDesc = cubeDescController.getDesc("test_kylin_cube_with_slr_ready");
+
+        for (DimensionDesc dimensionDesc : cubeDesc.getDimensions()) {
+            if (dimensionDesc.getDerived() != null) {
+                for (String derivedDimension : dimensionDesc.getDerived()) {
+                    Assert.assertTrue(sql.contains(derivedDimension));
+                }
+            }
+        }
+    }
+
 }