Типы моделей 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 проекта. Ее можно вызывать в других моделях, тем самым переиспользуя логику.