Ответ вслух Middle dbt спрашивают часто обновлено

Инкрементальные модели dbt

Вопрос

Расскажите, как работает инкрементальная модель в dbt и какие у неё подводные камни.

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

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

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

Коротко

Образцовый ответ: «При первом запуске или с full-refresh модель строится целиком. Дальше isincremental() истинно, и я фильтрую источник, например по updatedat относительно максимума в {{ this }}.

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

  • Первый запуск строит таблицу целиком, дальше только новые строки

  • is_incremental() и this для фильтра по уже загруженному

  • unique_key и стратегии merge или delete+insert

  • Опоздавшие данные: окно пересчёта с запасом

  • Изменение логики требует full-refresh

  • Удаления в источнике сами не отразятся

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

  • Как обработать удаления строк в источнике?
  • Чем стратегия merge отличается от insert_overwrite?

Разбор

Образцовый ответ: «При первом запуске или с full-refresh модель строится целиком. Дальше is_incremental() истинно, и я фильтрую источник, например по updated_at относительно максимума в {{ this }}. Новые строки вставляются, а если задан unique_key, строки с совпадающим ключом обновляются стратегией merge или delete+insert, в зависимости от адаптера. Подводные камни: опоздавшие данные с меткой ниже максимума не попадут, поэтому беру окно с запасом в несколько дней и полагаюсь на unique_key. Изменил логику расчёта, значит, старые строки посчитаны по-старому, нужен full-refresh или бэкфилл. Удаления в источнике инкрементальная модель сама не увидит, нужен флаг удаления от CDC или периодическая сверка. И при изменении схемы модели надо задать on_schema_change».

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

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