Выбор ответа Senior dbt спрашивают часто обновлено

Опоздавшие строки в инкрементальной модели

Вопрос

Инкрементальная модель фильтрует updated_at > max(updated_at) из своей таблицы. Источник иногда загружает строки с задержкой, и их updated_at меньше уже обработанного максимума. Что произойдёт и как исправить?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Такие строки не попадут в модель никогда; нужно окно с запасом (= max - интервал) и uniquekey. Фильтр по максимуму предполагает, что данные приходят строго по порядку меток.

Варианты ответа

  1. Они попадут в следующий запуск автоматически, потому что dbt отслеживает необработанные строки источника
  2. dbt выдаст ошибку о нарушении порядка меток, и запуск упадёт, пока не сделать full-refresh
  3. Такие строки не попадут в модель никогда; нужно окно с запасом (>= max - интервал) и unique_keyправильный ответ
  4. Нужно убрать unique_key: тогда dbt вставляет строки без сравнения, и опоздавшие появятся

Разбор

Фильтр по максимуму предполагает, что данные приходят строго по порядку меток. Опоздавшие строки оказываются ниже границы и пропускаются навсегда. Окно пересчёта с запасом снова захватывает последние дни, а unique_key превращает повтор в обновление. Ошибки dbt не выдаст. Удаление ключа приведёт к дублям, а не к появлению пропущенных строк.

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

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