О функции env_var
Функция env_var может использоваться для подключения переменных окружения из системы к вашему проекту dbt. Вы можете использовать функцию env_var в файле profiles.yml, в файле dbt_project.yml, в файле sources.yml, в файлах schema.yml, а также в .sql‑файлах моделей. По сути, env_var доступна везде, где dbt обрабатывает Jinja‑код.
При использовании в файле profiles.yml (чтобы избежать хранения учетных данных на сервере) это может выглядеть следующим образом:
profile:
target: prod
outputs:
prod:
type: postgres
host: 127.0.0.1
# IMPORTANT: Make sure to quote the entire Jinja string here
user: "{{ env_var('DBT_USER') }}"
password: "{{ env_var('DBT_PASSWORD') }}"
....
Если при запуске dbt присутствуют переменные окружения DBT_USER и DBT_ENV_SECRET_PASSWORD, то эти переменные будут, как и ожидается, подтянуты в профиль. Если какие‑либо переменные окружения не заданы, то dbt вызовет ошибку компиляции.
При использовании переменных окружения для свойств, которые ожидают целое число или логическое значение (true/false), необходимо добавить фильтр в Jinja-выражение. Например:
Целые числа
Преобразуйте строку в число, чтобы избежать ошибок вида '1' is not of type 'integer':
{{ env_var('DBT_THREADS') | int }} или {{ env_var('DB_PORT') | as_number }}
Booleans
Convert the string to a boolean explicitly:
{{ env_var('SECURE').lower() == 'true' }}
:::
Обязательно заключайте всю строку Jinja в кавычки (как показано выше), иначе YAML‑парсер запутается из‑за фигурных скобок Jinja.
env_var принимает второй, необязательный аргумент для значения по умолчанию, например:
...
models:
jaffle_shop:
+materialized: "{{ env_var('DBT_MATERIALIZATION', 'view') }}"
Это может быть полезно для избежания ошибок компиляции, когда переменная окружения недоступна.
Секреты
Для определенных конфигураций вы можете использовать "секретные" переменные окружения. Любая переменная окружения с префиксом DBT_ENV_SECRET будет:
- Доступна для использования в
profiles.yml+packages.ymlчерез ту же функциюenv_var() - Запрещена везде, включая
dbt_project.ymlи SQL моделей, чтобы предотвратить случайную запись этих секретных значений в data warehouse или метаданные артефактов - Удалена из логов dbt и заменена на
*****, всякий раз, когда ее значение появляется в этих логах (даже если переменная окружения не была вызвана напрямую)
Основной случай использования секретных переменных окружения — это токены доступа git для частных пакетов.
Примечание: Когда dbt загружает учетные данные профиля и конфигурацию пакета, секретные переменные окружения будут заменены строковым значением переменной окружения. Вы не можете изменять секреты с помощью фильтров Jinja, включая фильтры приведения типов, такие как as_number или as_bool, или передавать их в качестве аргументов в другие макросы Jinja. Вы можете использовать один секрет на конфигурацию:
# работает
host: "{{ env_var('DBT_ENV_SECRET_HOST') }}"
# не работает
host: "www.{{ env_var('DBT_ENV_SECRET_HOST_DOMAIN') }}.com/{{ env_var('DBT_ENV_SECRET_HOST_PATH') }}"
Пользовательские метаданные
Любая переменная окружения с префиксом DBT_ENV_CUSTOM_ENV_ будет включена в двух местах, с именем без префикса в качестве ключа:
- Артефакты dbt:
metadata->env - События и структурированные логи:
info->extra
Словарь этих переменных окружения с префиксом также будет доступен в контекстной переменной dbt_metadata_envs:
-- {{ dbt_metadata_envs }}
select 1 as id
$ DBT_ENV_CUSTOM_ENV_MY_FAVORITE_COLOR=indigo DBT_ENV_CUSTOM_ENV_MY_FAVORITE_NUMBER=6 dbt compile
Компилируется в:
-- {'MY_FAVORITE_COLOR': 'indigo', 'MY_FAVORITE_NUMBER': '6'}
select 1 as id
Использование платформы dbt
Если вы используете dbt, вы должны соблюдать соглашения об именовании переменных окружения. Переменные окружения в dbt должны иметь префикс DBT_ (включая DBT_ENV_CUSTOM_ENV_ или DBT_ENV_SECRET). Ключи переменных окружения пишутся в верхнем регистре и чувствительны к регистру. При обращении к {{env_var('DBT_KEY')}} в коде вашего проекта ключ должен точно совпадать с переменной, определённой в интерфейсе dbt.
Если вы используете dbt Cloud, вы должны соблюдать соглашения о наименовании переменных окружения. Переменные окружения в dbt Cloud должны иметь префикс DBT_ (включая DBT_ENV_CUSTOM_ENV_ или DBT_ENV_SECRET). Ключи переменных окружения пишутся заглавными буквами и чувствительны к регистру. При обращении к {{env_var('DBT_KEY')}} в коде вашего проекта ключ должен точно соответствовать переменной, определенной в интерфейсе dbt Cloud.