You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@spark.apache.org by "cloud-fan (via GitHub)" <gi...@apache.org> on 2025/07/30 13:14:45 UTC
Re: [PR] [SPARK-51555][SQL] Add the time_diff() function [spark]
cloud-fan commented on code in PR #51715:
URL: https://github.com/apache/spark/pull/51715#discussion_r2242658809
##########
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/DateTimeUtils.scala:
##########
@@ -716,6 +716,43 @@ object DateTimeUtils extends SparkDateTimeUtils {
(endNanos - startNanos) / NANOS_PER_MICROS
}
+ // Helper method to get the number of nanoseconds per the given time unit, used for calculating
+ // the difference between two time values (timediff function). Supported units are: MICROSECOND,
+ // MILLISECOND, SECOND, MINUTE, HOUR.
+ private def getNanosPerTimeUnit(unit: UTF8String): Long = {
+ val unitStr = unit.toString
+ unitStr.toUpperCase(Locale.ROOT) match {
+ case "MICROSECOND" =>
+ NANOS_PER_MICROS
+ case "MILLISECOND" =>
+ NANOS_PER_MILLIS
+ case "SECOND" =>
+ NANOS_PER_SECOND
+ case "MINUTE" =>
+ NANOS_PER_SECOND * SECONDS_PER_MINUTE
+ case "HOUR" =>
+ NANOS_PER_SECOND * SECONDS_PER_MINUTE * MINUTES_PER_HOUR
+ case _ =>
+ throw QueryExecutionErrors.invalidTimeUnitError("timediff", unitStr)
+ }
+ }
+
+ /**
+ * Gets the difference between two time values in the specified unit.
+ *
+ * @param unit Specifies the interval units in which to express the difference between
+ * the two time parameters. Supported units are: MICROSECOND, MILLISECOND,
+ * SECOND, MINUTE, HOUR.
+ * @param startNanos A time value expressed as nanoseconds since the start of the day,
+ * which the function subtracts from `endNanos`.
+ * @param endNanos A time value expressed as nanoseconds since the start of the day,
+ * from which the function subtracts `startNanos`.
+ * @return The time span between two time values, in the units specified.
+ */
+ def timeDiff(unit: UTF8String, startNanos: Long, endNanos: Long): Long = {
+ (endNanos - startNanos) / getNanosPerTimeUnit(unit)
Review Comment:
is there a risk of overflow?
--
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: reviews-unsubscribe@spark.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org