Practical SQL

Rounding Timestamps in BigQuery

Constantin LunguUpdated 1 min read

Photo by Lukas Blazek on Unsplash

Have you ever encountered a situation where you would need to round a timestamp to the nearest second, 5 seconds or minute? While rounding a number is trivial, it's a little bit less straightforward when dealing with timestamps.

Let's consider the following input data.

BigQuery input data for rounding: a single event_time TIMESTAMP column with 10 rows between 2023-03-01 10:00:22.577 and 10:01:52.371 UTC, stored at millisecond precision.

We have our event_times that are at milliseconds-level grain. To round the times to the nearest granularity we'd like, we can use a combination of UNIX_MILLIS and TIMESTAMP_MILLIS.

The steps are as follows:

  • Transform the timestamp into milliseconds since Unix epoch (that is, number of milliseconds that have passed since January 1st, 1970) with UNIX_MILLIS

  • Divide that number by your target grain in milliseconds i.e. 1000 for 1 second or 60000 for 1 minute

  • CAST that number to an INT64

  • Multiply that number by your target grain (the number from above) i.e. 1000 for 1 second or 60000 for 1 minute

  • Transform it back to a timestamp using TIMESTAMP_MILLIS

SELECT 

event_time,
UNIX_MILLIS(event_time) AS epoch_milliseconds,
TIMESTAMP_MILLIS( CAST(UNIX_MILLIS(event_time) / 1000 AS INT64) * 1000) AS nearest_second,
TIMESTAMP_MILLIS( CAST(UNIX_MILLIS(event_time) / 5000 AS INT64) * 5000) AS nearest_5seconds,
TIMESTAMP_MILLIS( CAST(UNIX_MILLIS(event_time) / 60000 AS INT64) * 60000) AS nearest_1minute,
TIMESTAMP_MILLIS( CAST(UNIX_MILLIS(event_time) / 300000 AS INT64) * 300000) AS nearest_5minutes,

FROM input_data

Upon executing this query, the following results are produced:

BigQuery result of rounding event_time: columns event_time, epoch milliseconds (header cut off), nearest_second, nearest_5seconds, nearest_1minute and nearest_5minutes; for example 10:00:34.757 rounds to 10:00:35, 10:00:35, 10:01:00 and 10:00:00 UTC respectively.

The functions presented above and others relevant to working with timestamps are presented in the documentation.

Thanks for reading and enjoy working with BigQuery!

Found it useful? Subscribe to my Analytics newsletter at notjustsql.com.