Типы моделей dbt
dbt позволяет создавать модели со следующими типами:
view
table
incremental
ephemeral
Тип materialized_view
не поддерживается в Datapulse
view
В DWH создается view и пересоздается каждый раз при запуске модели. Плюсы:
- не хранит данные физически
- легко поддерживать
Минусы:
- каждый раз выполняет SQL-запрос к источнику (может быть долго)
- При пересоздании view dbt делает
drop cascade
! Поэтому все зависимые от view объекты будут автоматически удалены!
table
В DWH создается таблица и пересоздается каждый раз при запуске модели.
Плюсы:
- Таблицы быстрее отдают данные, нежели view
Минусы:
- Могут долго перестраиваться, так как вся таблица сперва удаляется, а потом создается заново.
- При пересоздании table dbt делает
drop cascade
! Поэтому все зависимые от table объекты будут автоматически удалены!
incremental
В DWH создается таблица и не пересоздается при обновлении, а обновляется новыми данными.
Плюсы:
- Обновляется быстрее, чем
table
(если установлен инкремент) - Не пересоздается путем
drop cascade
, тем самым не удалит при изменении зависимые объекты
Минусы:
- Сложнее поддерживать
incremental стратегия
Incremental strategy определяет, как таблица будет обновляться.
Datapulse поддерживает два типа обновления для таблиц incremental
:
append
- только вставка данныхdelete+insert
- удаление изменившихся данных (по ключу) и вставка новых данных
Захват инкремента
Модели типа incremental
не будут столь эффективны, если при обновлении модели каждый раз брать данные из источника целиком (full scan
).
Более того, если у модели типа incremental
выбрана стратегия append
, то при каждом запуске в целевую таблицу будут записываться все строки из таблицы источника, а старые строки в целевой таблице не будут удаляться.
Чтобы полностью использовать преимущества моделей типа incremental
требуется в SQL-запросе указать захват только новых/изменившихся строк на источнике.
select * from some_source_table
{% if is_incremental() %}
where start_date > (select coalesce(max(start_date),'1900-01-01') from {{ this }} )
{% endif %}
{% if is_incremental() %}
) в таблице some_source_table
будут прочитаны только те строки, у которых start_date
больше максимального значения столбца start_date
в some_source_table
.
{{ this }}
указывает на текущую модель.
ephemeral
В DWH не создается никакого объекта. Модель типа ephemeral виртуальная и существует только в рамках вашего dbt проекта. Ее можно вызывать в других моделях, тем самым переиспользуя логику.