Типы timestamps в Data Engineering 2/3
🔸 Особый случай – timestamps в SCD2 таблицах. Created_at надёжно показывает, когда появилась запись, а valid_from/valid_to отвечают за историчность данных. Важно сохранять обе группы дат. Смотри пример:
WITH source_changes AS (
SELECT *
FROM (VALUES
(1, 'Старый адрес', '2024-01-01 10:00:00'::timestamp),
(1, 'Новый адрес', '2024-01-01 15:00:00'::timestamp)
) AS t(user_id, address, created_at)
),
-- Храним обе группы дат
complete_approach AS (
SELECT
user_id,
address,
created_at, -- когда создали запись
created_at as valid_from, -- когда версия стала активной
COALESCE(LEAD(created_at)
OVER (PARTITION BY user_id ORDER BY created_at) - interval '1' second
, '9999-12-31'::timestamp) as valid_to -- когда версия стала неактивной
FROM source_changes
)
SELECT * FROM complete_approach
ORDER BY created_at;
Зачем хранить обе группы дат:
* Created_at нужен для аудита – когда физически появилась запись
* Valid_from/valid_to показывают период действия версии
* При откате изменений или исправлении ошибок в истории у нас будет полная картина