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

О функции env_var

Функция env_var может быть использована для включения переменных окружения из системы в ваш проект dbt. Эта функция env_var может быть использована в файле profiles.yml, файле dbt_project.yml, файле sources.yml, ваших файлах schema.yml и в моделях .sql. По сути, env_var доступна везде, где dbt обрабатывает код jinja.

Когда используется в файле profiles.yml (чтобы избежать размещения учетных данных на сервере), она может быть использована следующим образом:

profiles.yml
profile:
target: prod
outputs:
prod:
type: postgres
host: 127.0.0.1
# ВАЖНО: Убедитесь, что вся строка Jinja заключена в кавычки
user: "{{ env_var('DBT_USER') }}"
password: "{{ env_var('DBT_PASSWORD') }}"
....

Если переменные окружения DBT_USER и DBT_PASSWORD присутствуют при вызове dbt, то эти переменные будут добавлены в профиль, как и ожидалось. Если какие-либо переменные окружения не установлены, dbt выдаст ошибку компиляции.

Целочисленные переменные окружения

Если передаете переменную окружения для свойства, использующего целочисленный тип (например, port, threads), обязательно добавьте фильтр в выражение Jinja, как показано здесь. В противном случае dbt выдаст ошибку ['threads']: '1' is not of type 'integer'. {{ env_var('DBT_THREADS') | int }} или {{ env_var('DB_PORT') | as_number }}

Кавычки, фигурные скобки и вы

Убедитесь, что вся строка jinja заключена в кавычки (как показано выше), иначе YAML-парсер будет сбит с толку фигурными скобками Jinja.

env_var принимает второй, необязательный аргумент для значения по умолчанию, например:

dbt_project.yml
...
models:
jaffle_shop:
+materialized: "{{ env_var('DBT_MATERIALIZATION', 'view') }}"

Это может быть полезно для избежания ошибок компиляции, когда переменная окружения недоступна.

Секреты

Для определенных конфигураций вы можете использовать "секретные" переменные окружения. Любая переменная окружения с префиксом DBT_ENV_SECRET будет:

  • Доступна для использования в profiles.yml + packages.yml через ту же функцию env_var()
  • Запрещена везде, включая dbt_project.yml и SQL моделей, чтобы предотвратить случайную запись этих секретных значений в или метаданные артефактов
  • Удалена из логов 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_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 Cloud

Если вы используете dbt Cloud, вы должны соблюдать соглашения о наименовании переменных окружения. Переменные окружения в dbt Cloud должны иметь префикс DBT_ (включая DBT_ENV_CUSTOM_ENV_ или DBT_ENV_SECRET). Ключи переменных окружения пишутся заглавными буквами и чувствительны к регистру. При обращении к {{env_var('DBT_KEY')}} в коде вашего проекта ключ должен точно соответствовать переменной, определенной в интерфейсе dbt Cloud.

0