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

О функции 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
# 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 принимает второй, необязательный аргумент для значения по умолчанию, например:

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 моделей, чтобы предотвратить случайную запись этих секретных значений в 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_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.

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

0
Loading