Ответ вслух Middle Моделирование: Кимбалл, звезда, SCD спрашивают часто обновлено

Как загрузить SCD 2

Вопрос

Расскажите, как вы реализуете ежедневную загрузку измерения клиентов в формате SCD 2.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «В измерении суррогатный ключ, натуральный ключ клиента, отслеживаемые атрибуты, validfrom, validto с далёкой датой для текущей версии, флаг iscurrent и хеш атрибутов. Ежедневно беру снимок клиентов из staging, считаю хеш тех же атрибутов и сравниваю с текущими версиями по натуральному ключу.

Что должно прозвучать в ответе

  • Колонки: суррогатный ключ, натуральный ключ, атрибуты, valid_from, valid_to, is_current, хеш атрибутов

  • Найти изменения: сравнить хеш отслеживаемых атрибутов с текущей версией

  • Закрыть текущие версии изменившихся

  • Вставить новые версии для изменившихся и новых

  • Удалённые в источнике: закрыть версию или пометить

  • Идемпотентность и одна транзакция

Что могут спросить следом

  • Как обработать запоздавшие изменения задним числом?
  • Как сделать то же в dbt?

Разбор

Образцовый ответ: «В измерении суррогатный ключ, натуральный ключ клиента, отслеживаемые атрибуты, valid_from, valid_to с далёкой датой для текущей версии, флаг is_current и хеш атрибутов. Ежедневно беру снимок клиентов из staging, считаю хеш тех же атрибутов и сравниваю с текущими версиями по натуральному ключу. Для изменившихся закрываю текущую версию датой загрузки и вставляю новую с valid_from = дата загрузки. Новых клиентов просто вставляю. Исчезнувших из источника не удаляю, а закрываю версию или ставлю признак удаления. Всё в одной транзакции или через MERGE, и загрузка идемпотентна: повторный запуск за тот же день ничего не меняет, потому что хеши уже совпадают. В dbt для этого есть snapshots со стратегией check или timestamp».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.