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));
+ }
+ }
+ }
+ }
+
}