Переменные окружения
Переменные окружения позволяют настраивать поведение проекта dbt в зависимости от того, где он выполняется. Обратитесь к документации по
env_var, чтобы узнать подробнее о том, как вызывать Jinja-функцию {{env_var('DBT_KEY','OPTIONAL_DEFAULT')}} в коде вашего проекта.
Переменные окружения в dbt должны иметь префикс DBT_, DBT_ENV_SECRET_ или DBT_ENV_CUSTOM_ENV_. Имена переменных окружения записываются в верхнем регистре и чувствительны к регистру. При обращении к {{env_var('DBT_KEY')}} в коде вашего проекта имя должно в точности совпадать с именем переменной, заданным в пользовательском интерфейсе dbt.
Настройка и переопределение переменных окружения
В этом разделе объясняется, как задавать и переопределять переменные окружения в dbt.
- Порядок приоритета
- Задание переменных окружения
- Переопределение переменных окружения на уровне job
- Переопределение переменных окружения на персональном уровне
- Локальные переменные окружения
Порядок приоритета
Значения переменных окружения можно задавать в нескольких местах в dbt. Поэтому dbt интерпретирует переменные окружения в следующем порядке приоритета (от самого низкого к самому высокому):
Существует четыре уровня задания переменных окружения:
- Необязательный аргумент со значением по умолчанию, переданный в Jinja-функцию
env_varв коде; это значение может быть переопределено на следующем уровне (самый низкий приоритет) - Уровень проекта со значением по умолчанию, которое может быть переопределено на следующем уровне
- Уровень окружения, значение которого, в свою очередь, может быть переопределено на следующем уровне
- Уровень задания (переопределение для задания) или в Studio IDE для отдельного разработчика (персональное переопределение). (самый высокий приоритет)
Задание переменных окружения
Чтобы задать переменные окружения на уровне проекта и окружения, нажмите Orchestration в левом меню, затем выберите Environments. Нажмите Environment variables, чтобы добавить или обновить переменные окружения.
Обратите внимание на колонку Project default. Это удобное место для задания значения, которое будет применяться ко всему проекту независимо от того, где выполняется код. Мы рекомендуем использовать это поле, если вам нужен универсальный дефолт или если вы хотите добавить токен или секрет на уровне всего проекта.
Справа от столбца Значение по умолчанию для проекта отображаются все ваши окружения. Значения, заданные на уровне окружения, имеют приоритет над значением по умолчанию на уровне проекта. Здесь можно, например, указать dbt, что значение переменной окружения следует интерпретировать по-разному в промежуточном (staging) и производственном (production) окружениях.
Переопределение переменных окружения на уровне job
У вас может быть несколько job, которые выполняются в одном и том же окружении, и при этом вы хотите, чтобы переменная окружения интерпретировалась по‑разному в зависимости от job.
При создании или редактировании job вы увидите раздел, в котором можно переопределить значения переменных окружения, заданные на уровне проекта или окружения.
Каждое задание выполняется в определённой среде развёртывания и по умолчанию наследует значения, заданные на уровне этой среды (или на самом высоком из уровней приоритета, на которых заданы значения). Если вы хотите задать другое значение на уровне задания, измените его, чтобы переопределить унаследованное значение.
Переопределение переменных окружения на персональном уровне
Вы также можете задать персональное переопределение значения переменной окружения при разработке во встроенной в dbt среде разработки (Studio IDE). По умолчанию dbt использует значения переменных окружения, заданные в среде разработки проекта. Чтобы просмотреть и переопределить эти значения, в dbt:
- Нажмите на имя своей учётной записи в меню слева и выберите Account settings.
- В разделе Your profile нажмите Credentials, а затем выберите свой проект.
- Прокрутите страницу до раздела Environment variables и нажмите Edit, чтобы внести необходимые изменения.
Чтобы переопределить значение, разработчики могут изменить его, указав другое значение для использования. Эти значения будут учитываться в Studio IDE как на вкладке Results, так и на вкладке Compiled SQL.
Если вы не задали значение по умолчанию на уровне проекта для каждой переменной окружения, dbt может не знать, как интерпретировать значение переменной окружения во всех контекстах. В таких случаях dbt выдаст ошибку компиляции: "Env var required but not provided".
Если вы измените значение переменной окружения во время сеанса работы в Studio IDE, может потребоваться перезапустить Studio IDE, чтобы изменение вступило в силу.
Чтобы перезапустить Studio IDE в процессе разработки, нажмите на зелёный индикатор 'ready' или красное сообщение 'compilation error' в правом нижнем углу Studio IDE. Откроется модальное окно, в котором нужно нажать кнопку Restart IDE. Это загрузит значения переменных окружения в вашу среду разработки.
Существуют известные проблемы, связанные с частичным парсингом проекта и изменением переменных окружения в середине сессии IDE. Если вы обнаружили, что ваш dbt‑проект компилируется не с теми значениями, которые вы задали, попробуйте удалить файл target/partial_parse.msgpack в проекте dbt — это заставит dbt перекомпилировать весь проект целиком.
Локальные переменные окружения
Если вы используете расширение dbt для VS Code, вы можете задать переменные окружения локально — в профиле shell (~/.zshrc или ~/.bashrc) либо в файле .env в корне вашего dbt‑проекта.
Дополнительную информацию см. в разделе Настройка расширения dbt для VS Code.
Работа с секретами
Хотя все переменные окружения в dbt шифруются при хранении, dbt предоставляет дополнительные возможности для управления переменными окружения, содержащими секретные или другие конфиденциальные значения. Если вы хотите, чтобы значение определённой переменной окружения не только скрывалось в dbt, но и удалялось из всех журналов и сообщений об ошибках, добавьте к имени переменной префикс DBT_ENV_SECRET_.
Для переменных окружения с префиксом DBT_ENV_SECRET_ действуют дополнительные меры безопасности. Они шифруются при хранении с помощью ключа шифрования (например, AWS KMS, если ваш экземпляр размещён в AWS), и доступ к ним возможен только после расшифровки с использованием этого ключа. Расшифровка разрешена только в определённых процессах, в которых требуется значение переменной, например при выполнении задания. Значения секретных переменных никогда не записываются в журналы или сообщения об ошибках и скрываются в dbt, поэтому они не раскрываются в пользовательском интерфейсе или артефактах и доступны dbt только во время выполнения, когда это необходимо.
Примечание: Переменную окружения можно использовать для хранения git‑токена для клонирования репозитория. Мы рекомендуем выдавать git‑токену права только на чтение и рассмотреть использование machine‑account или PAT сервисного пользователя с ограниченным доступом к репозиториям — это поможет соблюдать хорошие практики безопасности.
Специальные переменные окружения
В dbt есть ряд встроенных предопределённых переменных. Их значения задаются автоматически и не могут быть изменены. Это означает, что порядок приоритета переопределения переменных окружения на уровне проекта, окружения или задания не применяется к этим предопределённым переменным.
Детали Studio IDE
Следующая переменная окружения задаётся автоматически для Studio IDE:
DBT_CLOUD_GIT_BRANCH— Содержит имя Git-ветки разработки в Studio IDE.- Значение переменной меняется при смене ветки.
- После смены ветки перезапуск Studio IDE не требуется.
- В настоящее время недоступна в dbt CLI.
Пример использования — Эта переменная полезна, когда нужно динамически использовать имя Git-ветки в качестве префикса для схемы разработки ({{ env_var('DBT_CLOUD_GIT_BRANCH') }}).
Контекст платформы dbt
Следующие переменные окружения задаются автоматически:
DBT_ENV— Этот ключ зарезервирован для приложения dbt и всегда принимает значение 'prod'. Только для запусков развертывания.DBT_CLOUD_ENVIRONMENT_NAME— Имя среды dbt, в которой выполняетсяdbt.DBT_CLOUD_ENVIRONMENT_TYPE— Тип среды dbt, в которой выполняетсяdbt. Допустимые значения:dev,stagingилиprod. Для сред развертывания общего назначения значение будет пустым, поэтому используйте значение по умолчанию, например{{ env_var('DBT_CLOUD_ENVIRONMENT_TYPE', '') }}.DBT_CLOUD_INVOCATION_CONTEXT— Тип контекста, в котором вызываетсяdbt. Возможные значения:dev,staging,prodилиci.- Кроме того, используйте
DBT_CLOUD_INVOCATION_CONTEXTв макросеgenerate_schema_name(), чтобы явно задать правило использования только схемы по умолчанию (с префиксомdbt_cloud_pr) при запуске заданий CI, даже если эти задания CI выполняются в той же среде, что и производственные задания.
- Кроме того, используйте
Детали запуска
DBT_CLOUD_PROJECT_ID— Идентификатор проекта dbt для этого запускаDBT_CLOUD_JOB_ID— Идентификатор задания dbt для этого запускаDBT_CLOUD_RUN_ID— Идентификатор этого конкретного запускаDBT_CLOUD_RUN_REASON_CATEGORY— «Категория» события, инициировавшего этот запуск (одно из значений:scheduled,github_pull_request,gitlab_merge_request,azure_pull_request,other)DBT_CLOUD_RUN_REASON— Конкретная причина этого запуска (например,Scheduled,Kicked off by <email>или пользовательское значение, заданное через API)DBT_CLOUD_ENVIRONMENT_ID— Идентификатор среды для этого запускаDBT_CLOUD_ACCOUNT_ID— Идентификатор аккаунта dbt для этого запуска
Детали Git
Следующие переменные в настоящее время доступны только для сборок PR в GitHub, GitLab и Azure DevOps, запускаемых с помощью вебхука
DBT_CLOUD_PR_ID— ID Pull Request в подключенной системе контроля версийDBT_CLOUD_GIT_SHA— SHA git‑коммита, который выполняется для этой сборки Pull Request
Примеры использования
Переменные окружения можно использовать разными способами: они дают вам больше возможностей и гибкости, позволяя проще выполнять нужные задачи в dbt.








