[3/3] kylin git commit: KYLIN-1270 improve TimedJsonStreamParser to support week_start, month_start, quarter_start, year_start
KYLIN-1270 improve TimedJsonStreamParser to support week_start, month_start, quarter_start, year_start Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ec5c28d9 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ec5c28d9 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ec5c28d9 Branch: refs/heads/2.x-staging Commit: ec5c28d99d58c761b7dd6a0be2301fc8563f156c Parents: 4d4e743 Author: honmaAuthored: Wed Dec 30 21:33:37 2015 +0800 Committer: honma Committed: Mon Jan 4 21:39:54 2016 +0800 -- .../org/apache/kylin/common/util/TimeUtil.java | 44 +++-- .../apache/kylin/common/util/TimeUtilTest.java | 21 +++- .../source/kafka/TimedJsonStreamParser.java | 51 ++-- 3 files changed, 94 insertions(+), 22 deletions(-) -- http://git-wip-us.apache.org/repos/asf/kylin/blob/ec5c28d9/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java -- diff --git a/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java b/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java index c79e88b..17868a6 100644 --- a/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java +++ b/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java @@ -1,12 +1,13 @@ package org.apache.kylin.common.util; +import java.util.Calendar; +import java.util.TimeZone; + /** */ public class TimeUtil { -public enum NormalizedTimeUnit { -MINUTE, HOUR, DAY -} +private static TimeZone gmt = TimeZone.getTimeZone("GMT"); private static long ONE_MINUTE_TS = 60 * 1000; private static long ONE_HOUR_TS = 60 * ONE_MINUTE_TS; private static long ONE_DAY_TS = 24 * ONE_HOUR_TS; @@ -23,7 +24,40 @@ public class TimeUtil { return ts / ONE_DAY_TS * ONE_DAY_TS; } -public static long getNextPeriodStart(long ts, long period) { -return ((ts + period - 1) / period) * period; +public static long getWeekStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(getDayStart(ts)); +calendar.add(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek() - calendar.get(Calendar.DAY_OF_WEEK)); +return calendar.getTimeInMillis(); } + +public static long getMonthStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(ts); +int year = calendar.get(Calendar.YEAR); +int month = calendar.get(Calendar.MONTH); +calendar.clear(); +calendar.set(year, month, 1); +return calendar.getTimeInMillis(); +} + +public static long getQuarterStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(ts); +int year = calendar.get(Calendar.YEAR); +int month = calendar.get(Calendar.MONTH); +calendar.clear(); +calendar.set(year, month / 3 * 3, 1); +return calendar.getTimeInMillis(); +} + +public static long getYearStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(ts); +int year = calendar.get(Calendar.YEAR); +calendar.clear(); +calendar.set(year, 0, 1); +return calendar.getTimeInMillis(); +} + } http://git-wip-us.apache.org/repos/asf/kylin/blob/ec5c28d9/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java -- diff --git a/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java b/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java index d81d49a..3fdf6aa 100644 --- a/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java +++ b/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java @@ -3,14 +3,19 @@ package org.apache.kylin.common.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.TimeZone; -import org.apache.kylin.common.util.TimeUtil.NormalizedTimeUnit; import org.junit.Assert; import org.junit.Test; /** */ public class TimeUtilTest { + +public enum NormalizedTimeUnit { +MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR +} + public static long normalizeTime(long timeMillis, NormalizedTimeUnit unit) { Calendar a = Calendar.getInstance(); Calendar b = Calendar.getInstance(); @@ -28,6 +33,7 @@ public class TimeUtilTest { @Test public void basicTest() throws ParseException { java.text.DateFormat dateFormat = new SimpleDateFormat("/MM/dd HH:mm:ss"); +
kylin git commit: KYLIN-1270 improve TimedJsonStreamParser to support week_start, month_start, quarter_start, year_start
Repository: kylin Updated Branches: refs/heads/2.0-rc e0748f5b4 -> 5c83a14a4 KYLIN-1270 improve TimedJsonStreamParser to support week_start, month_start, quarter_start, year_start Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/5c83a14a Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/5c83a14a Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/5c83a14a Branch: refs/heads/2.0-rc Commit: 5c83a14a4bea5e1496d49ed362593aaaf84922ed Parents: e0748f5 Author: honmaAuthored: Wed Dec 30 21:33:37 2015 +0800 Committer: honma Committed: Wed Dec 30 21:35:43 2015 +0800 -- .../org/apache/kylin/common/util/TimeUtil.java | 44 +++-- .../apache/kylin/common/util/TimeUtilTest.java | 21 +++- .../source/kafka/TimedJsonStreamParser.java | 51 ++-- 3 files changed, 94 insertions(+), 22 deletions(-) -- http://git-wip-us.apache.org/repos/asf/kylin/blob/5c83a14a/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java -- diff --git a/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java b/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java index c79e88b..17868a6 100644 --- a/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java +++ b/core-common/src/main/java/org/apache/kylin/common/util/TimeUtil.java @@ -1,12 +1,13 @@ package org.apache.kylin.common.util; +import java.util.Calendar; +import java.util.TimeZone; + /** */ public class TimeUtil { -public enum NormalizedTimeUnit { -MINUTE, HOUR, DAY -} +private static TimeZone gmt = TimeZone.getTimeZone("GMT"); private static long ONE_MINUTE_TS = 60 * 1000; private static long ONE_HOUR_TS = 60 * ONE_MINUTE_TS; private static long ONE_DAY_TS = 24 * ONE_HOUR_TS; @@ -23,7 +24,40 @@ public class TimeUtil { return ts / ONE_DAY_TS * ONE_DAY_TS; } -public static long getNextPeriodStart(long ts, long period) { -return ((ts + period - 1) / period) * period; +public static long getWeekStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(getDayStart(ts)); +calendar.add(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek() - calendar.get(Calendar.DAY_OF_WEEK)); +return calendar.getTimeInMillis(); } + +public static long getMonthStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(ts); +int year = calendar.get(Calendar.YEAR); +int month = calendar.get(Calendar.MONTH); +calendar.clear(); +calendar.set(year, month, 1); +return calendar.getTimeInMillis(); +} + +public static long getQuarterStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(ts); +int year = calendar.get(Calendar.YEAR); +int month = calendar.get(Calendar.MONTH); +calendar.clear(); +calendar.set(year, month / 3 * 3, 1); +return calendar.getTimeInMillis(); +} + +public static long getYearStart(long ts) { +Calendar calendar = Calendar.getInstance(gmt); +calendar.setTimeInMillis(ts); +int year = calendar.get(Calendar.YEAR); +calendar.clear(); +calendar.set(year, 0, 1); +return calendar.getTimeInMillis(); +} + } http://git-wip-us.apache.org/repos/asf/kylin/blob/5c83a14a/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java -- diff --git a/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java b/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java index d81d49a..3fdf6aa 100644 --- a/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java +++ b/core-common/src/test/java/org/apache/kylin/common/util/TimeUtilTest.java @@ -3,14 +3,19 @@ package org.apache.kylin.common.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.TimeZone; -import org.apache.kylin.common.util.TimeUtil.NormalizedTimeUnit; import org.junit.Assert; import org.junit.Test; /** */ public class TimeUtilTest { + +public enum NormalizedTimeUnit { +MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR +} + public static long normalizeTime(long timeMillis, NormalizedTimeUnit unit) { Calendar a = Calendar.getInstance(); Calendar b = Calendar.getInstance(); @@ -28,6 +33,7 @@ public class TimeUtilTest { @Test public void basicTest() throws ParseException { java.text.DateFormat dateFormat