Разница в поведении между TIMESTAMP_DIFF и TIMESTAMP_SUB в BigQuery

# #google-bigquery

#google-bigquery

Вопрос:

Я протестировал два способа определения того, превышает ли разница между двумя событиями заданный порог, и обнаружил, что второй (использование ) кажется более последовательным. TIMESTAMP_DIFF

TIMESTAMP_SUB(finished_at, INTERVAL 24 HOUR) lt; created_at

TIMESTAMP_DIFF(finished_at, created_at, HOUR) gt; 24

Но я не понимаю, почему TIMESTAMP_SUB это не дает того же результата.

Ответ №1:

TIMESTAMP_SUB() вычитается точное количество единиц времени. TIMESTAMP_DIFF() вернет все запрошенное количество единиц времени. Таким образом, разница в 23 часа и 55 минут вернет TIMESTAMP_DIFF() 23 часа. Смотреть ниже:

 with data as (  select   cast('2021-11-29 20:40:40.010832 UTC' as timestamp) as created_at,  cast('2021-11-30 20:35:40.010832 UTC' as timestamp) as finished_at  --cast('2021-11-30 20:45:40.010832 UTC' as timestamp) as finished_at ) select  created_at,  finished_at,  timestamp_sub(finished_at, interval 24 hour) as finished_sub24,  timestamp_sub(finished_at, interval 24 hour) gt;= created_at as finished_sub24_gt_created,  timestamp_diff(finished_at, created_at, hour) as finished_created_diff_hours from data  

Переключите finished_at метки времени, чтобы показать, как он ведет себя с разницей в 24 часа и 05 минут.

Если вам нужна большая точность, вы можете рассмотреть возможность использования 24 * 60 минут или 24 * 60 * 60 секунды.