You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ja...@apache.org on 2022/03/09 22:50:00 UTC
[pinot] branch master updated: fixing datetime truncate for multi-day (#8327)
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 <wa...@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-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org