Перейти к основному содержимому

Советы и хитрости 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, чтобы упростить и ускорить ваш рабочий процесс:

PackageDescription
dbt_codegenИспользуйте этот пакет для генерации YML-файлов для моделей и источников, а также SQL-файлов для staging-моделей.
dbt_utilsПакет содержит макросы, полезные для повседневной разработки. Например, date_spine генерирует таблицу со всеми датами между значениями, переданными в параметрах.
dbt_project_evaluatorПакет сравнивает ваш dbt-проект со списком наших лучших практик и предоставляет рекомендации и указания по обновлению моделей.
dbt_expectationsПакет содержит множество тестов, выходящих за рамки встроенных в dbt.
dbt_audit_helperПакет позволяет сравнивать результаты выполнения двух запросов. Используйте его при рефакторинге существующей логики, чтобы убедиться, что новые результаты полностью совпадают.
dbt_artifactsПакет сохраняет информацию о запусках dbt непосредственно в вашей платформе данных, что позволяет отслеживать производительность моделей с течением времени.
dbt_meta_testingЭтот пакет проверяет, достаточно ли ваш 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, чтобы ветвить логику в зависимости от используемого окружения. Например, при разработке собирать все в одной схеме, а в продакшене — использовать несколько схем.

Нашли ошибку?

0
Loading