Советы и хитрости dbt
Используйте эту страницу как источник полезных наблюдений и практических рекомендаций для улучшения работы с dbt. Независимо от того, только ли вы начинаете работать с dbt или уже являетесь опытным пользователем, эти советы помогут вам работать более эффективно и результативно.
Ниже приведены советы, сгруппированные по следующим категориям:
- Советы по пакетам, которые помогут оптимизировать ваш рабочий процесс.
- Продвинутые советы и техники, которые помогут получить максимум от dbt.
Если вы разрабатываете в Studio IDE, вы можете обратиться к странице горячих клавиш, чтобы сделать разработку более продуктивной и удобной для всех.
Советы по YAML
В этом разделе поясняется, где именно вы можете использовать Jinja, а также вкладывать vars и env_var в ваших YAML-файлах.
- Вы можете использовать Jinja почти в каждом YAML-файле dbt, за исключением файла
dependencies.yml. Это связано с тем, что файлdependencies.ymlне поддерживает Jinja. - Используйте
varsв любом YAML-файле, который поддерживает Jinja (например,schema.yml,snapshots.yml). Однако обратите внимание:- В файлах
dbt_project.yml,packages.ymlиprofiles.ymlвы должны передаватьvarsчерез CLI с помощью флага--vars, а не определять их внутри блокаvars:в самом YAML-файле. Это связано с тем, что эти файлы обрабатываются до рендеринга Jinja.
- В файлах
- Вы можете использовать
env_var()во всех YAML-файлах, которые поддерживают Jinja. При этом толькоprofiles.ymlиpackages.ymlподдерживают использование переменных окружения для безопасных значений (с префиксомDBT_ENV_SECRET_). Такие значения маскируются в логах и предназначены для хранения учетных данных или секретов.
Для получения дополнительной информации ознакомьтесь с документацией по контексту dbt Core.
Советы по пакетам
Используйте эти пакеты dbt, чтобы упростить и ускорить ваш рабочий процесс:
| Loading table... |
Продвинутые советы и техники
- Используйте структуру папок как основной способ селекции моделей. Команда
dbt build --select marts.marketingпроще и надежнее, чем использование тегов для каждой модели. - Рассматривайте джобы с точки зрения частоты сборки и SLA. Запускайте вместе модели с почасовой, ежедневной или еженедельной периодичностью.
- Используйте конфигурацию where config для тестов, чтобы проверять утверждение только на подмножестве записей.
- Опция store_failures позволяет изучать записи, из-за которых тесты не проходят, чтобы вы могли либо исправить данные, либо изменить сам тест.
- Используйте пороги severity, чтобы задать допустимое количество ошибок для теста.
- Используйте incremental_strategy в конфигурации инкрементальной модели, чтобы реализовать наиболее эффективное поведение в зависимости от объема данных и надежности уникальных ключей.
- Задавайте
varsв файлеdbt_project.yml, чтобы определить глобальные значения по умолчанию для определенных условий, которые затем можно переопределять с помощью флага--varsв командах. - Используйте for loops в Jinja, чтобы соблюдать принцип DRY и избавляться от повторяющейся логики, например при выборе серии колонок с одинаковыми трансформациями и шаблонами именования.
- Вместо использования post-hooks применяйте конфигурацию grants config для надежного управления правами доступа в хранилище данных.
- Определяйте пороги source-freshness для источников, чтобы избежать запуска трансформаций на данных, которые уже были обработаны.
- Используйте оператор
+слева от имени модели —dbt build --select +model_name, чтобы запустить модель и все ее upstream-зависимости. Используйте оператор+справа —dbt build --select model_name+, чтобы запустить модель и все downstream-зависимые от нее объекты. - Используйте
dir_name, чтобы запускать все модели в пакете или директории. - Используйте оператор
@слева от имени модели в CI без поддержки state-aware подхода для ее тестирования. Этот оператор запускает всех родителей и потомков выбранного объекта, а также родителей его потомков, которые в свежей CI-схеме, скорее всего, еще не существуют. - Используйте флаг --exclude, чтобы исключить подмножество моделей из выборки.
- Используйте флаг --full-refresh, чтобы пересобрать инкрементальную модель с нуля.
- Используйте seeds для создания справочных таблиц вручную, например соответствий ZIP-кодов штатам или UTM-меток маркетинга кампаниям. Команда
dbt seedзагрузит CSV-файлы в ваше хранилище данных и сделает их доступными для использования черезrefв моделях. - Используйте target.name, чтобы ветвить логику в зависимости от используемого окружения. Например, при разработке собирать все в одной схеме, а в продакшене — использовать несколько схем.