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 <chunen...@kyligence.io> Authored: Thu Dec 28 21:36:13 2017 +0800 Committer: Li Yang <liy...@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)); + } + } + } + } + }