This is an automated email from the ASF dual-hosted git repository. jackie pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push: new 07a7ddb fixing datetime truncate for multi-day (#8327) 07a7ddb is described below commit 07a7ddb3e0799454b05be4ad1a7452e34b74ce4a Author: Rong Rong <walterddr.walter...@gmail.com> AuthorDate: Wed Mar 9 14:49:37 2022 -0800 fixing datetime truncate for multi-day (#8327) --- .../org/apache/pinot/common/function/scalar/DateTimeFunctions.java | 3 ++- .../transform/transformer/datetime/BaseDateTimeTransformer.java | 3 ++- .../org/apache/pinot/core/data/function/DateTimeFunctionsTest.java | 7 +++++-- .../transform/transformer/datetime/DateTimeConverterTest.java | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java b/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java index 183c98b..5746816 100644 --- a/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java +++ b/pinot-common/src/main/java/org/apache/pinot/common/function/scalar/DateTimeFunctions.java @@ -703,7 +703,8 @@ public class DateTimeFunctions { dateTime = dateTime.withHourOfDay((dateTime.getHourOfDay() / size) * size).hourOfDay().roundFloorCopy(); break; case DAYS: - dateTime = dateTime.withDayOfMonth((dateTime.getDayOfMonth() / size) * size).dayOfMonth().roundFloorCopy(); + dateTime = dateTime.withDayOfMonth(((dateTime.getDayOfMonth() - 1) / size) * size + 1).dayOfMonth() + .roundFloorCopy(); break; default: break; diff --git a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/transformer/datetime/BaseDateTimeTransformer.java b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/transformer/datetime/BaseDateTimeTransformer.java index 2b20699..a8dc47d 100644 --- a/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/transformer/datetime/BaseDateTimeTransformer.java +++ b/pinot-core/src/main/java/org/apache/pinot/core/operator/transform/transformer/datetime/BaseDateTimeTransformer.java @@ -80,7 +80,8 @@ public abstract class BaseDateTimeTransformer<I, O> implements DataTransformer<I break; case DAYS: _dateTimeTruncate = (dateTime) -> _outputDateTimeFormatter - .print(dateTime.withDayOfMonth((dateTime.getDayOfMonth() / sz) * sz).dayOfMonth().roundFloorCopy()); + .print(dateTime.withDayOfMonth(((dateTime.getDayOfMonth() - 1) / sz) * sz + 1).dayOfMonth() + .roundFloorCopy()); break; default: _dateTimeTruncate = _outputDateTimeFormatter::print; diff --git a/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java b/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java index a94d039..e291c7f 100644 --- a/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java +++ b/pinot-core/src/test/java/org/apache/pinot/core/data/function/DateTimeFunctionsTest.java @@ -456,9 +456,12 @@ public class DateTimeFunctionsTest { "1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "12:HOURS", "2018-04-11 00:00:00.000"); // Test conversion from millis since epoch to simple date format (America/Denver timezone with 5 day granularity) + testDateTimeConvert(1519926205000L/* 20180301T09:43:25 */, "1:MILLISECONDS:EPOCH", + "1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "5:DAYS", + "2018-03-01 00:00:00.000"); testDateTimeConvert(1522230205000L/* 20180328T09:43:25 */, "1:MILLISECONDS:EPOCH", "1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "5:DAYS", - "2018-03-25 00:00:00.000"); + "2018-03-26 00:00:00.000"); // Test conversion from millis since epoch to simple date format (America/Los_Angeles timezone with 1 day // granularity) testDateTimeConvert(1524013200000L/* 20180418T01:00:00 */, "1:MILLISECONDS:EPOCH", @@ -507,7 +510,7 @@ public class DateTimeFunctionsTest { // granularity) testDateTimeConvert("20180328T09:43:25", "1:HOURS:SIMPLE_DATE_FORMAT:yyyyMMdd''T''HH:mm:ss", "1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss" + ".SSS tz(America/Denver)", "5:DAYS", - "2018-03-25 00:00:00.000"); + "2018-03-26 00:00:00.000"); // Test conversion from simple date format to another simple date format (America/Los_Angeles timezone with 1 day // granularity) testDateTimeConvert("20180418T01:00:00", "1:HOURS:SIMPLE_DATE_FORMAT:yyyyMMdd''T''HH:mm:ss", diff --git a/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/transformer/datetime/DateTimeConverterTest.java b/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/transformer/datetime/DateTimeConverterTest.java index 0e91f2d..2761354 100644 --- a/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/transformer/datetime/DateTimeConverterTest.java +++ b/pinot-core/src/test/java/org/apache/pinot/core/operator/transform/transformer/datetime/DateTimeConverterTest.java @@ -218,7 +218,7 @@ public class DateTimeConverterTest { 1523560598000L /* 20180412T19:16:38 */, 1524160502000L /* 20180419T17:55:02 */, 1522230205000L /* 20180328T09:43:25 */ }; - String[] expected = {"2018-04-10 00:00:00.000", "2018-04-15 00:00:00.000", "2018-03-25 00:00:00.000"}; + String[] expected = {"2018-04-11 00:00:00.000", "2018-04-16 00:00:00.000", "2018-03-26 00:00:00.000"}; entries.add(new Object[]{ "1:MILLISECONDS:EPOCH", "1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "5:DAYS", input, expected @@ -356,7 +356,7 @@ public class DateTimeConverterTest { // Test conversion from simple date format to another simple date format (America/Denver timezone with 5 day // granualrity) String[] input = {"20180412T19:16:38", "20180419T17:55:02", "20180328T09:43:25"}; - String[] expected = {"2018-04-10 00:00:00.000", "2018-04-15 00:00:00.000", "2018-03-25 00:00:00.000"}; + String[] expected = {"2018-04-11 00:00:00.000", "2018-04-16 00:00:00.000", "2018-03-26 00:00:00.000"}; entries.add(new Object[]{ "1:HOURS:SIMPLE_DATE_FORMAT:yyyyMMdd'T'HH:mm:ss", "1:MILLISECONDS:SIMPLE_DATE_FORMAT:yyyy-MM-dd HH:mm:ss.SSS tz(America/Denver)", "5:DAYS", input, expected --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org