From 46a856996a346d53a24b74aef486a24fc8a94594 Mon Sep 17 00:00:00 2001 From: Tianhao Zhao Date: Wed, 13 Dec 2017 14:05:12 +0800 Subject: [PATCH] KYLIN-3100 Building empty partitioned cube with rest api supports partition_start_date --- .../java/org/apache/kylin/cube/CubeManager.java | 9 ++++++-- .../org/apache/kylin/cube/CubeManagerTest.java | 26 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java index 5e72721..e5ec2d7 100755 --- a/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java +++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeManager.java @@ -469,8 +469,13 @@ public class CubeManager implements IRealizationProvider { if (cube.getModel().getPartitionDesc().isPartitioned()) { // if missing start, set it to where last time ends CubeSegment last = cube.getLastSegment(); - if (last != null && !last.isOffsetCube() && tsRange.start.v == 0) { - tsRange = new TSRange(last.getTSRange().end.v, tsRange.end.v); + CubeDesc cubeDesc = cube.getDescriptor(); + if (tsRange != null && tsRange.start.v == 0) { + if (last == null) { + tsRange = new TSRange(cubeDesc.getPartitionDateStart(), tsRange.end.v); + } else if (!last.isOffsetCube()) { + tsRange = new TSRange(last.getTSRange().end.v, tsRange.end.v); + } } } else { // full build diff --git a/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java b/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java index bb91650..03dd928 100644 --- a/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java +++ b/core-cube/src/test/java/org/apache/kylin/cube/CubeManagerTest.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.io.IOException; import java.util.List; import java.util.Map; import java.util.NavigableSet; @@ -409,6 +410,31 @@ public class CubeManagerTest extends LocalFileMetadataTestCase { } } + @Test + public void testBuildCubeWithPartitionStartDate() throws IOException { + Long PARTITION_DATE_START = 1513123200L; + Long FIRST_BUILD_DATE_END = 1514764800L; + Long SECOND_BUILD_DATE_END = 1540339200L; + + KylinConfig config = getTestConfig(); + CubeManager cubeManager = CubeManager.getInstance(config); + CubeInstance cube = cubeManager.getCube("test_kylin_cube_with_slr_empty"); + cube.getDescriptor().setPartitionDateStart(PARTITION_DATE_START); + + CubeSegment segment = cubeManager.appendSegment(cube, new TSRange(0L, FIRST_BUILD_DATE_END), null, null, null); + assertEquals(segment._getDateRangeStart(), PARTITION_DATE_START.longValue()); + assertEquals(segment._getDateRangeEnd(), FIRST_BUILD_DATE_END.longValue()); + + segment.setStatus(SegmentStatusEnum.READY); + CubeUpdate cubeBuilder = new CubeUpdate(cube); + cubeManager.updateCube(cubeBuilder); + + segment = cubeManager.appendSegment(cube, new TSRange(0L, SECOND_BUILD_DATE_END), null, null, null); + assertEquals(segment._getDateRangeStart(), FIRST_BUILD_DATE_END.longValue()); + assertEquals(segment._getDateRangeEnd(), SECOND_BUILD_DATE_END.longValue()); + + } + public CubeDescManager getCubeDescManager() { return CubeDescManager.getInstance(getTestConfig()); -- 2.8.4 (Apple Git-73)