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

is_incremental() и this

Вопрос

Что означает блок {% if is_incremental() %} where updated_at > (select max(updated_at) from {{ this }}) {% endif %}?

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

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

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

Коротко

Правильный ответ: При инкрементальном запуске брать только строки новее максимума в таблице модели; при первом запуске фильтра нет. isincremental() ложно, если таблицы ещё нет или запуск с --full-refresh, тогда модель строится целиком. {{ this }} указывает на саму модель в базе, а не на источник.

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

  1. При инкрементальном запуске брать только строки новее максимума в таблице модели; при первом запуске фильтра нетправильный ответ
  2. Фильтр применяется всегда, включая первый запуск: тогда max(updated_at) равен NULL, и выбираются вообще все строки
  3. this ссылается на таблицу источника, и фильтр берёт строки новее, чем самые свежие в источнике
  4. Блок удаляет из таблицы модели строки старше максимума, а затем вставляет обновлённые

Разбор

is_incremental() ложно, если таблицы ещё нет или запуск с --full-refresh, тогда модель строится целиком. {{ this }} указывает на саму модель в базе, а не на источник. Сравнение с NULL вернуло бы пустой результат, а не все строки. Удаления блок не делает, он только ограничивает выборку.

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

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