Как загрузить SCD 2
Вопрос
Расскажите, как вы реализуете ежедневную загрузку измерения клиентов в формате SCD 2.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Колонки: суррогатный ключ, натуральный ключ, атрибуты, valid_from, valid_to, is_current, хеш атрибутов
Найти изменения: сравнить хеш отслеживаемых атрибутов с текущей версией
Закрыть текущие версии изменившихся
Вставить новые версии для изменившихся и новых
Удалённые в источнике: закрыть версию или пометить
Идемпотентность и одна транзакция
Что могут спросить следом
- Как обработать запоздавшие изменения задним числом?
- Как сделать то же в dbt?
Разбор
Образцовый ответ: «В измерении суррогатный ключ, натуральный ключ клиента, отслеживаемые атрибуты, valid_from, valid_to с далёкой датой для текущей версии, флаг is_current и хеш атрибутов. Ежедневно беру снимок клиентов из staging, считаю хеш тех же атрибутов и сравниваю с текущими версиями по натуральному ключу. Для изменившихся закрываю текущую версию датой загрузки и вставляю новую с valid_from = дата загрузки. Новых клиентов просто вставляю. Исчезнувших из источника не удаляю, а закрываю версию или ставлю признак удаления. Всё в одной транзакции или через MERGE, и загрузка идемпотентна: повторный запуск за тот же день ничего не меняет, потому что хеши уже совпадают. В dbt для этого есть snapshots со стратегией check или timestamp».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «Моделирование: Кимбалл, звезда, SCD»
- Аддитивность мер
- Типы таблиц фактов
- Типы SCD
- Data Vault: хабы, линки, сателлиты
- Факт или измерение
- Гранулярность факта
- Порядок загрузки SCD 2
- Point-in-time JOIN