Jackie-Jiang commented on code in PR #14298:
URL: https://github.com/apache/pinot/pull/14298#discussion_r1821361962


##########
pinot-core/src/main/java/org/apache/pinot/core/operator/transform/transformer/datetime/BaseDateTimeTransformer.java:
##########
@@ -58,41 +74,145 @@ public BaseDateTimeTransformer(@Nonnull DateTimeFormatSpec 
inputFormat, @Nonnull
     _outputDateTimeFormatter = outputFormat.getDateTimeFormatter();
     _outputGranularity = outputGranularity;
     _outputGranularityMillis = outputGranularity.granularityToMillis();
+    _bucketingChronology = bucketingTimeZone != null ? 
ISOChronology.getInstance(bucketingTimeZone) : null;
+    _dateTime = new MutableDateTime(0L, DateTimeZone.UTC);
+    _printBuffer = new StringBuilder();
+
+    final int size = _outputGranularity.getSize();
 
     // setup date time truncating based on output granularity
-    final int sz = _outputGranularity.getSize();
+    //when size == 1, skip the needless set() calls
     switch (_outputGranularity.getTimeUnit()) {
       case MILLISECONDS:
-        _dateTimeTruncate = (dateTime) -> _outputDateTimeFormatter
-            .print(dateTime.withMillisOfSecond((dateTime.getMillisOfSecond() / 
sz) * sz));
+        if (size != 1) {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.setMillisOfSecond((dateTime.getMillisOfSecond() / size) * 
size);
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.setMillisOfSecond((dateTime.getMillisOfSecond() / size) * 
size);
+            return dateTime.getMillis();
+          };
+        } else {
+          _sdfDateTimeTruncate = (dateTime) -> print(dateTime);
+          _millisDateTimeTruncate = (dateTime) -> dateTime.getMillis();
+        }
         break;
       case SECONDS:
-        _dateTimeTruncate = (dateTime) -> _outputDateTimeFormatter.print(
-            dateTime.withSecondOfMinute((dateTime.getSecondOfMinute() / sz) * 
sz).secondOfMinute().roundFloorCopy());
+        if (size != 1) {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.setSecondOfMinute((dateTime.getSecondOfMinute() / size) * 
size);
+            dateTime.secondOfMinute().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.setSecondOfMinute((dateTime.getSecondOfMinute() / size) * 
size);
+            dateTime.secondOfMinute().roundFloor();
+            return dateTime.getMillis();
+          };
+        } else {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.secondOfMinute().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.secondOfMinute().roundFloor();
+            return dateTime.getMillis();
+          };
+        }
         break;
       case MINUTES:
-        _dateTimeTruncate = (dateTime) -> _outputDateTimeFormatter
-            .print(dateTime.withMinuteOfHour((dateTime.getMinuteOfHour() / sz) 
* sz).minuteOfHour().roundFloorCopy());
+        if (size != 1) {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.setMinuteOfHour((dateTime.getMinuteOfHour() / size) * 
size);
+            dateTime.minuteOfHour().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.setMinuteOfHour((dateTime.getMinuteOfHour() / size) * 
size);
+            dateTime.minuteOfHour().roundFloor();
+            return dateTime.getMillis();
+          };
+        } else {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.minuteOfHour().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.minuteOfHour().roundFloor();
+            return dateTime.getMillis();
+          };
+        }
         break;
       case HOURS:
-        _dateTimeTruncate = (dateTime) -> _outputDateTimeFormatter
-            .print(dateTime.withHourOfDay((dateTime.getHourOfDay() / sz) * 
sz).hourOfDay().roundFloorCopy());
+        if (size != 1) {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.setHourOfDay((dateTime.getHourOfDay() / size) * size);
+            dateTime.hourOfDay().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.setHourOfDay((dateTime.getHourOfDay() / size) * size);
+            dateTime.hourOfDay().roundFloor();
+            return dateTime.getMillis();
+          };
+        } else {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.hourOfDay().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.hourOfDay().roundFloor();
+            return dateTime.getMillis();
+          };
+        }
         break;
       case DAYS:
-        _dateTimeTruncate = (dateTime) -> _outputDateTimeFormatter
-            .print(dateTime.withDayOfMonth(((dateTime.getDayOfMonth() - 1) / 
sz) * sz + 1).dayOfMonth()
-                .roundFloorCopy());
+        if (size != 1) {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.setDayOfMonth(((dateTime.getDayOfMonth() - 1) / size) * 
size + 1);
+            dateTime.dayOfMonth().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.setDayOfMonth(((dateTime.getDayOfMonth() - 1) / size) * 
size + 1);
+            dateTime.dayOfMonth().roundFloor();
+            return dateTime.getMillis();
+          };
+        } else {
+          _sdfDateTimeTruncate = (dateTime) -> {
+            dateTime.dayOfMonth().roundFloor();
+            return print(dateTime);
+          };
+          _millisDateTimeTruncate = (dateTime) -> {
+            dateTime.dayOfMonth().roundFloor();
+            return dateTime.getMillis();
+          };
+        }
         break;
       default:
-        _dateTimeTruncate = _outputDateTimeFormatter::print;
+        _sdfDateTimeTruncate = _outputDateTimeFormatter::print;

Review Comment:
   I see. Let's add some comments explaining this



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to