# Профили подключения

Локальная разработка

Когда вы запускаете dbt из командной строки, dbt парсит файл `dbt_project.yml` и получает имя `profile`, которое необходимо dbt для подключения к вашему data warehouse.

dbt\_project.yml

```yaml
# Example dbt_project.yml file
name: 'jaffle_shop'
profile: 'jaffle_shop'
...
```

Затем dbt проверяет файл `profiles.yml` на наличие профиля с таким же именем. Профиль содержит все детали, необходимые для подключения к вашему хранилищу данных.

dbt будет искать файл `profiles.yml` в текущем рабочем каталоге и, если не найдет его там, по умолчанию использует каталог `~/.dbt/`.

Обычно этот файл располагается вне dbt‑проекта, чтобы чувствительные учетные данные не попадали в систему контроля версий. Однако `profiles.yml` можно безопасно хранить в репозитории, если [использовать переменные окружения](https://docs.getdbt.tech/docs/build/environment-variables.md) для загрузки чувствительных данных.

\~/.dbt/profiles.yml

```yaml
# example profiles.yml file
jaffle_shop:
  target: dev
  outputs:
    dev:
      type: postgres
      host: localhost
      user: alice
      password: <password>
      port: 5432
      dbname: jaffle_shop
      schema: dbt_alice
      threads: 4

    prod:  # additional prod target
      type: postgres
      host: prod.db.example.com
      user: alice
      password: <prod_password>
      port: 5432
      dbname: jaffle_shop
      schema: analytics
      threads: 8
```

Чтобы добавить дополнительный target (например, `prod`) в существующий `profiles.yml`, достаточно добавить еще одну запись под ключом `outputs`.

## Функция `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

```yaml
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') }}"
      ....
```

## О файле `profiles.yml`

В файле `profiles.yml` вы можете хранить столько профилей, сколько необходимо. Как правило, используется один профиль для каждого хранилища данных. В большинстве организаций используется только один профиль.

## О профилях

Профиль состоит из *targets* и указанного *default target* (целевого окружения по умолчанию).

Каждый *target* задает тип хранилища данных, к которому вы подключаетесь, учетные данные для подключения и некоторые конфигурации, специфичные для dbt.

Набор учетных данных, которые необходимо указать в target, различается в зависимости от хранилища данных — примеры профилей для каждого поддерживаемого хранилища доступны в разделе [Supported Data Platforms](https://docs.getdbt.tech/docs/supported-data-platforms.md).

**Pro Tip:** Возможно, вам потребуется заключить пароль в кавычки, если он содержит специальные символы. Подробнее см. [здесь](https://stackoverflow.com/a/37015689/10415173).

## Настройка профиля

Чтобы настроить профиль, скопируйте соответствующий пример профиля для вашего хранилища данных в файл `profiles.yml` и обновите параметры следующим образом:

* Имя профиля: замените имя профиля на осмысленное — часто удобно использовать название вашей организации. Убедитесь, что это имя совпадает со значением `profile`, указанным в файле `dbt_project.yml`.

* `target`: target по умолчанию, который будет использовать ваш dbt‑проект. Он должен совпадать с одним из targets, определенных в профиле. Чаще всего используется `dev`.

* Заполнение target:

  * `type`: тип хранилища данных, к которому вы подключаетесь
  * Учетные данные хранилища: получите их у администратора базы данных, если у вас их еще нет. Помните, что учетные данные пользователя — это чувствительная информация, которой не следует делиться.
  * `schema`: схема по умолчанию, в которой dbt будет создавать объекты.
  * `threads`: количество потоков, в которых будет выполняться dbt‑проект.

Ниже вы можете найти дополнительную информацию о том, какие значения использовать в targets.

Используйте команду [debug](https://docs.getdbt.tech/reference/dbt-jinja-functions/debug-method.md) для проверки подключения к хранилищу данных. Запустите `dbt debug` из каталога dbt‑проекта, чтобы протестировать соединение.

## Понимание targets в профилях

dbt поддерживает несколько целевых окружений (targets) в одном профиле, чтобы способствовать использованию отдельных сред разработки и продакшена, как описано в разделе [Среды dbt](https://docs.getdbt.tech/docs/local/dbt-environments.md).

Типичный профиль аналитика, использующего dbt локально, содержит target с именем `dev`, который задан как target по умолчанию.

Также в профиле может быть target `prod`, который создает объекты в продакшен‑схеме. Однако, поскольку продакшен‑запуски часто выполняются по расписанию, мы рекомендуем разворачивать dbt‑проект на отдельной машине, а не на локальном компьютере. Поэтому у большинства пользователей dbt в локальном профиле присутствует только target `dev`.

Если в вашем профиле настроено несколько целевых окружений и вы хотите использовать окружение, отличное от заданного по умолчанию, укажите его с помощью флага `--target` при запуске команды dbt.

Например, чтобы выполнить команду для целевого окружения `prod` вместо окружения по умолчанию `dev`:

```bash
dbt run --target prod
```

Флаг `--target` можно использовать с любой командой dbt, например:

```bash
dbt build --target prod
dbt test --target dev
dbt compile --target qa
```

### Переопределение профилей и targets

При запуске команд dbt вы можете указать, какой профиль и target использовать, напрямую из CLI с помощью флагов `--profile` и `--target` [flags](https://docs.getdbt.tech/reference/global-configs/about-global-configs.md#available-flags). Эти флаги переопределяют значения, заданные в `dbt_project.yml`, при условии, что указанные профиль и target уже определены в файле `profiles.yml`.

Чтобы запустить проект dbt с профилем или целевым окружением, отличными от используемых по умолчанию, можно воспользоваться следующими флагами CLI:

* Флаг `--profile` — Переопределяет профиль, заданный в `dbt_project.yml`, указывая другой профиль, определённый в `profiles.yml`.
* Флаг `--target` — Указывает, какое целевое окружение в этом профиле использовать (согласно определению в `profiles.yml`).

Эти флаги полезны при работе с несколькими профилями и targets, когда требуется временно переопределить значения по умолчанию без изменения файлов.

```bash
dbt run --profile my-profile-name --target dev
```

В этом примере команда `dbt run` будет использовать профиль `my-profile-name` и target `dev`.

## Понимание учетных данных хранилища данных

Мы рекомендуем, чтобы у каждого пользователя dbt был собственный набор учетных данных базы данных, включая отдельного пользователя для продакшен‑запусков dbt. Это упрощает отладку проблемных запросов, управление владением схемами и повышает безопасность.

Чтобы учетные данные, используемые в target, позволяли dbt корректно работать, необходимо убедиться, что пользователь имеет соответствующие привилегии. Хотя точный набор привилегий зависит от конкретного хранилища данных, как минимум пользователь должен иметь возможность:

* читать исходные данные
* создавать схемы¹
* читать системные tables

Запуск dbt без привилегий на создание схем

Если пользователю нельзя выдать привилегию на создание схем, dbt‑запуски должны быть направлены на существующую схему, в которой у пользователя есть права на создание объектов.

## Понимание target schemas

Target schema представляет собой схему по умолчанию, в которой dbt будет создавать объекты, и часто используется как ключевое различие между разными окружениями внутри одного хранилища данных.

Схемы в BigQuery

dbt использует термин «schema» в target для всех поддерживаемых хранилищ данных для единообразия. Обратите внимание, что в случае BigQuery schema фактически является dataset.

Схема, используемая в продакшене, должна быть названа так, чтобы было очевидно, что она предназначена для конечных пользователей и аналитики — часто для этого используется имя `analytics`.

Для разработки хорошо зарекомендовала себя практика называть схему в target `dev` как `dbt_<username>`. Добавление имени пользователя в название схемы позволяет нескольким пользователям параллельно разрабатывать в dbt, поскольку у каждого будет собственная схема, и пользователи не будут перезаписывать объекты друг друга. Это также помогает поддерживать единообразие владения объектами и прав доступа в пределах схемы.

Обратите внимание, что заранее создавать target schema не требуется — при запуске dbt проверит, существует ли схема, и создаст ее при необходимости.

Хотя target schema задает схему по умолчанию, имеет смысл разделять модели по разным схемам, что можно реализовать с помощью [custom schemas](https://docs.getdbt.tech/docs/build/custom-schemas.md).

## Понимание threads

При запуске dbt строится ориентированный ациклический граф (DAG) связей между моделями. Параметр `threads` задает максимальное количество путей в этом графе, над которыми dbt может работать одновременно. Увеличение числа потоков позволяет сократить время выполнения проекта. Значение по умолчанию для `threads` в пользовательских профилях — 4.

Дополнительную информацию см. в разделе [using threads](https://docs.getdbt.tech/docs/running-a-dbt-project/using-threads.md).

## Advanced: Настройка каталога профилей

### dbt v2

dbt v2 определяет родительский каталог для `profiles.yml` в следующем порядке приоритета:

1. Параметр `--profiles-dir`
2. Корневой каталог проекта
3. Каталог `~/.dbt/`

Обратите внимание, что dbt v2 в настоящее время не поддерживает переменную окружения (Версии dbt: v1.11 и новее) `DBT_ENGINE_PROFILES_DIR` и размещение файла `profiles.yml` в текущем рабочем каталоге.

### dbt v1

dbt v1 определяет родительский каталог для `profiles.yml` в следующем порядке приоритета:

1. Параметр `--profiles-dir`
2. Переменная окружения (Версии dbt: v1.11 и новее) `DBT_ENGINE_PROFILES_DIR`
3. Текущий рабочий каталог
4. Каталог `~/.dbt/`

Чтобы проверить ожидаемое расположение файла `profiles.yml` для вашей установки dbt, выполните следующую команду:

```bash
$ dbt debug --config-dir
To view your profiles.yml file, run:

open /Users/alice/.dbt
```

Вам может понадобиться хранить файл `profiles.yml` в каталоге, отличном от `~/.dbt/`. Например, если вы [используете переменные окружения](https://docs.getdbt.tech/docs/build/environment-variables.md) для загрузки учетных данных, вы можете разместить этот файл в корневом каталоге dbt‑проекта.

Обратите внимание, что файл всегда должен называться `profiles.yml`, независимо от того, в каком каталоге он находится.

Существует несколько способов указать dbt альтернативное расположение файла `profiles.yml`:

### 1. Использовать опцию `--profiles-dir` при выполнении команды dbt

Пример использования:

```text
$ dbt run --profiles-dir path/to/directory
```

При использовании этого метода опцию `--profiles-dir` необходимо указывать при каждом запуске команды dbt.

### 2. Использовать переменную окружения `DBT_PROFILES_DIR` для изменения расположения по умолчанию

Задание этой переменной окружения переопределяет каталог, в котором dbt ищет файл `profiles.yml`. Установить ее можно так:

### 2. Используйте переменную окружения (Версии dbt: v1.11 и новее) `DBT_ENGINE_PROFILES_DIR`, чтобы изменить расположение по умолчанию (только для dbt v1)

Эта переменная окружения указывает dbt v1 искать файл `profiles.yml` в заданном каталоге вместо расположения по умолчанию. Чтобы задать её, выполните:

(Версии dbt: v1.11 и новее)

```text
$ export DBT_ENGINE_PROFILES_DIR=path/to/directory
```

Примечание: Эта переменная окружения не поддерживается в dbt v2.

## Дополнительно: использование переменных окружения

Учетные данные можно указать непосредственно в файле `profiles.yml` или загрузить из переменных окружения. Использование переменных окружения особенно полезно при развертывании dbt в производственной среде. Подробнее о переменных окружения можно узнать [здесь](https://docs.getdbt.tech/reference/dbt-jinja-functions/env_var.md).

Учетные данные могут быть указаны напрямую в файле `profiles.yml` или загружаться из переменных окружения. Использование переменных окружения особенно полезно для продакшен‑развертываний dbt. Подробнее о переменных окружения можно узнать [здесь](https://docs.getdbt.tech/reference/dbt-jinja-functions/env_var.md).

## Связанные документы

* [О файле `profiles.yml`](https://docs.getdbt.tech/docs/local/profiles.yml.md)
