Короткий ответ
Нужно явно решить и задокументировать стратегию для исторических строк — либо оставить payment_method = NULL с пометкой «данные недоступны до 2024-03-01», либо восстановить значение из альтернативного источника, если он есть; «додумывать» значение нельзя.
Как это работает подробнее
Backfill — это процесс заполнения нового поля или таблицы историческими значениями; для него нужно либо повторно извлечь исторические данные из источника (если там поле действительно существовало, но не экспортировалось), либо честно признать отсутствие данных за период.
Пример кода
example.sql
ALTER TABLE fact_orders ADD COLUMN payment_method TEXT;
UPDATE fact_orders
SET payment_method = s.payment_method
FROM source_archive.orders s
WHERE fact_orders.order_id = s.order_id
AND fact_orders.order_date >= '2024-03-01';
-- для order_date < '2024-03-01' payment_method остаётся NULL осознанноЧто использовать на практике
- На практике. Перед backfill стоит проверить у владельца источника, существовало ли значение payment_method исторически технически (может быть доступно через архивные логи или другую таблицу), и только потом либо восстанавливать, либо помечать период как «неприменимо»; в любом случае дата появления поля должна быть задокументирована в data dictionary.
- Проверка. SELECT MIN(order_date) FROM fact_orders WHERE payment_method IS NOT NULL должен быть равен '2024-03-01' (или дате, задокументированной как начало доступности поля).
Подводные камни
- Частые ошибки. Заполняют исторические NULL каким-то «дефолтным» значением (например, самым частым методом оплаты) ради «красивого» дашборда без пометки, что это не реальные данные — это создаёт ложное впечатление точности и искажает любую историческую аналитику по payment_method.