Выбор ответа Middle dbt спрашивают часто обновлено
is_incremental() и this
Вопрос
Что означает блок {% if is_incremental() %} where updated_at > (select max(updated_at) from {{ this }}) {% endif %}?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: При инкрементальном запуске брать только строки новее максимума в таблице модели; при первом запуске фильтра нет. isincremental() ложно, если таблицы ещё нет или запуск с --full-refresh, тогда модель строится целиком. {{ this }} указывает на саму модель в базе, а не на источник.
Варианты ответа
- При инкрементальном запуске брать только строки новее максимума в таблице модели; при первом запуске фильтра нетправильный ответ
- Фильтр применяется всегда, включая первый запуск: тогда
max(updated_at)равен NULL, и выбираются вообще все строки thisссылается на таблицу источника, и фильтр берёт строки новее, чем самые свежие в источнике- Блок удаляет из таблицы модели строки старше максимума, а затем вставляет обновлённые
Разбор
is_incremental() ложно, если таблицы ещё нет или запуск с --full-refresh, тогда модель строится целиком. {{ this }} указывает на саму модель в базе, а не на источник. Сравнение с NULL вернуло бы пустой результат, а не все строки. Удаления блок не делает, он только ограничивает выборку.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.