Ниже для BigQuery Standard SQL
#standardSQL
SELECT user_id,
TIMESTAMP_TRUNC(TIMESTAMP_ADD(created_at, INTERVAL 30 SECOND), MINUTE) created_at
FROM `project.dataset.table`
Вы можете протестировать, поиграть с этим, используя примеры данных из вашего вопроса, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT 14451 user_id, TIMESTAMP '2019-01-31 04:51:28 UTC' created_at UNION ALL
SELECT 14452, '2019-01-31 04:51:31 UTC' UNION ALL
SELECT 14453, '2019-01-31 04:51:59 UTC' UNION ALL
SELECT 14454, '2019-01-31 04:51:03 UTC'
)
SELECT user_id,
TIMESTAMP_TRUNC(TIMESTAMP_ADD(created_at, INTERVAL 30 SECOND), MINUTE) created_at
FROM `project.dataset.table`
с результатом
Row user_id created_at
1 14451 2019-01-31 04:51:00 UTC
2 14452 2019-01-31 04:52:00 UTC
3 14453 2019-01-31 04:52:00 UTC
4 14454 2019-01-31 04:51:00 UTC