# Окружения dbt

Платформа dbt

Окружение определяет, как dbt будет выполнять ваш проект в [Studio IDE](https://docs.getdbt.tech/docs/platform/studio-ide/develop-in-studio.md) или [dbt CLI](https://docs.getdbt.tech/docs/platform/dbt-cli-installation.md) (для разработки), а также в заданиях, запускаемых по расписанию (для развертывания).

Для выполнения dbt окружения определяют три ключевых параметра:

1. Версию dbt, которая будет использоваться для выполнения проекта
2. Данные подключения к хранилищу (включая настройки целевой базы данных/схемы)
3. Версию кода, которая будет выполняться

В каждом проекте dbt может быть только одно [окружение разработки](#create-a-development-environment), но количество [окружений развертывания](https://docs.getdbt.tech/docs/deploy/deploy-environments.md) не ограничено, что позволяет гибко настраивать выполнение заданий по расписанию.

Используйте окружения, чтобы адаптировать настройки к различным этапам работы над проектом и оптимизировать процесс выполнения, применяя принципы разработки программного обеспечения.

[![Иерархия окружений dbt: проекты, окружения, подключения и задания оркестрации.](/img/dbt-env.png?v=2 "Иерархия окружений dbt: проекты, окружения, подключения и задания оркестрации.")](#)Иерархия окружений dbt: проекты, окружения, подключения и задания оркестрации.

В следующих разделах подробно описаны различные типы окружений и порядок настройки окружения разработки в dbt.

## Типы окружений

В dbt есть два типа окружений:

* **Окружение развертывания** — Определяет настройки, используемые при выполнении заданий, созданных в этом окружении.

  <br />

  Типы окружений развертывания:

  * Общее (General)
  * Предпродакшен (Staging)
  * Продакшен (Production)

* **Окружение разработки** — Определяет настройки, используемые в Studio IDE или dbt platform CLI для конкретного проекта.

В каждом проекте dbt может быть только одно окружение разработки, но при этом любое количество общих окружений развертывания (General), одно окружение развертывания для продакшена (Production) и одно окружение развертывания для предпродакшена (Staging).

|                                                   | Разработка                      | Общее (General)     | Продакшен (Production) | Предпродакшен (Staging) |
| ------------------------------------------------- | ------------------------------- | ------------------- | ---------------------- | ----------------------- |
| **Для чего определяет настройки**                 | Studio IDE или dbt platform CLI | Запуски заданий dbt | Запуски заданий dbt    | Запуски заданий dbt     |
| **Сколько таких окружений может быть в проекте?** | 1                               | Любое количество    | 1                      | 1                       |

примечание

Для пользователей, знакомых с разработкой в dbt v1, каждое окружение примерно соответствует записи в файле `profiles.yml`, дополненной информацией о репозитории, которая обеспечивает выполнение нужной версии кода. Подробнее об окружениях v1 читайте [здесь](https://docs.getdbt.tech/docs/local/dbt-environments.md).

## Общие настройки окружения

И окружения разработки, и окружения развертывания имеют раздел **General Settings**, в котором есть базовые настройки, которые определяются для всех окружений:

| Настройка                                 | Пример значения | Определение                                                                                                                                                                             | Допустимые значения                                                                               |
| ----------------------------------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- |
| Имя окружения                             | Production      | Имя окружения                                                                                                                                                                           | Любая строка!                                                                                     |
| Тип окружения                             | Deployment      | Тип окружения                                                                                                                                                                           | Deployment, Development                                                                           |
| Установить тип развертывания              | PROD            | Задает тип окружения развертывания.                                                                                                                                                     | Production, Staging, General                                                                      |
| Версия dbt                                | **v1 Latest**   | dbt автоматически обновляет версию dbt, используемую в этом окружении, в соответствии с выбранным [каналом выпуска](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md). | **v2 Stable**, **v2 Nightly**, **v2 Extended**, **v1 Latest**, **v1 Compatible**, **v1 Extended** |
| Запускать только в пользовательской ветке | ☑️              | Определяет, следует ли использовать ветку, отличную от ветки репозитория по умолчанию                                                                                                   | См. ниже                                                                                          |
| Пользовательская ветка                    | dev             | Имя пользовательской ветки                                                                                                                                                              | См. ниже                                                                                          |

О версии dbt

dbt позволяет пользователям выбрать [канал выпуска](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md), чтобы регулярно получать обновления версии dbt в подходящем для их команды темпе.

### Поведение custom branch

По умолчанию все окружения используют основную ветку вашего репозитория (обычно ветку `main`) при доступе к вашему коду dbt. Это можно переопределить в каждом окружении dbt с помощью параметра **Default to a custom branch**. Поведение этого параметра немного различается в зависимости от типа окружения:

* **Разработка**: определяет ветку, от которой разработчики создают ветки в Studio IDE или dbt platform CLI и в которую направляют PR.
* **Развертывание:** определяет ветку, которая клонируется при выполнении заданий в каждом окружении.

Подробнее см. на [FAQ‑странице по этой теме](https://docs.getdbt.tech/faqs/Environments/custom-branch-settings.md)!

### Расширенные атрибуты (Extended attributes)

примечание

Расширенные атрибуты сейчас *не* поддерживаются для SSH‑туннелирования

Расширенные атрибуты позволяют задать фрагмент [`profiles.yml`](https://docs.getdbt.tech/docs/local/profiles.yml.md), который изменяет способ подключения dbt к вашей платформе данных. Вы можете задать любые YAML-атрибуты, которые адаптер dbt поддерживает в своем `profiles.yml`. Расширенные атрибуты частично переопределяют учетные данные подключения или среды, включая пользовательские переменные среды.

Место их настройки зависит от среды:

**Развертывание:** В [профиле подключения](https://docs.getdbt.tech/docs/platform/about-profiles.md), назначенном среде:

1. Перейдите в **Orchestration** > **Environments**.
2. Откройте среду развертывания и нажмите **Settings**.
3. Нажмите **Edit**.
4. В разделе **Connection profiles** нажмите на имя профиля.
5. Добавьте **Extended attributes** и сохраните изменения.

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

**Разработка:** [Профили](https://docs.getdbt.tech/docs/platform/about-profiles.md) применяются только к средам развертывания. Задайте **Extended attributes** на странице **Settings** среды разработки:

1. Перейдите в **Orchestration** > **Environments**.
2. Откройте среду разработки и нажмите **Settings**.
3. Нажмите **Edit profile**, затем задайте **Extended attributes** и сохраните изменения.

[![Поле Extended attributes в профиле подключения.](/img/docs/dbt-platform/using-dbt-platform/extended-attributes.png?v=2 "Поле Extended attributes в профиле подключения.")](#)Поле Extended attributes в профиле подключения.

<br />

Следующий код демонстрирует примеры типов атрибутов, которые можно добавить в текстовое поле **Extended attributes**:

```yaml
dbname: jaffle_shop      
schema: dbt_alice      
threads: 4
username: alice
password: '{{ env_var(''DBT_ENV_SECRET_PASSWORD'') }}'
```

#### Extended Attributes не маскируют значения секретов

Мы рекомендуем избегать указания секретных значений, чтобы они не были видны в текстовом поле и логах. Распространённый обходной путь — обернуть extended attributes в [environment variables](https://docs.getdbt.tech/docs/build/environment-variables.md). В примере выше `password: '{{ env_var(''DBT_ENV_SECRET_PASSWORD'') }}'` получит значение из переменной окружения `DBT_ENV_SECRET_PASSWORD` во время выполнения.

Вы также можете использовать массивы в качестве значений ключей. Например, чтобы передать список групп базы данных:

```yaml
db_groups:
  - db_editor
  - db_viewer
```

#### Расширенные атрибуты не скрывают секретные значения

* Рекомендуем не задавать секретные значения напрямую, чтобы они не отображались в текстовом поле и логах. Распространённый способ обойти это ограничение — использовать [переменные окружения](https://docs.getdbt.tech/docs/build/environment-variables.md) в расширенных атрибутах. В предыдущем примере `password: '{{ env_var(''DBT_ENV_SECRET_PASSWORD'') }}'` получит значение из переменной окружения `DBT_ENV_SECRET_PASSWORD` во время выполнения.

* Если вы используете [профили](https://docs.getdbt.tech/docs/platform/about-profiles.md) для окружений развёртывания, все ссылки `env_var` в расширенных атрибутах должны использовать переменные окружения, заданные *на уровне проекта*. Поскольку профили не привязаны к конкретному окружению, переменные уровня окружения недоступны во время проверки подключения. Задания выполняются нормально, поскольку у них есть конкретное окружение, но проверки подключения завершатся ошибкой, если переменная, на которую ссылается профиль, задана только на уровне окружения.

  Чтобы задать переменную на уровне проекта, перейдите в **Orchestration** > **Environments** > **Environment variables** и укажите значение в столбце **Project default**. Это значение применяется ко всем окружениям проекта, благодаря чему оно доступно профилям во время проверки подключения. Подробнее см. в разделе [Переменные окружения](https://docs.getdbt.tech/docs/build/environment-variables.md?version=2.0#setting-environment-variables).

#### Как работают расширенные атрибуты

Если вы разрабатываете в [Studio IDE](https://docs.getdbt.tech/docs/platform/studio-ide/develop-in-studio.md), [dbt platform CLI](https://docs.getdbt.tech/docs/platform/dbt-cli-installation.md) или [оркестрируете запуски заданий](https://docs.getdbt.tech/docs/deploy/deployments.md), механизм расширенных атрибутов разбирает предоставленный YAML и извлекает атрибуты `profiles.yml`. Для каждого отдельного атрибута:

* Если атрибут существует в другом источнике (например, в настройках проекта), его значение в профиле (например, значение уровня окружения) будет заменено. Он также переопределяет любые пользовательские переменные окружения (если сам не использует их через синтаксис, описанный выше для секретных значений)

* Если атрибут не существует, соответствующая пара «атрибут — значение» будет добавлена в профиль.

#### В расширенных атрибутах допускаются только **ключи верхнего уровня**

Это означает, что для изменения значения конкретного вложенного ключа необходимо указать весь ключ верхнего уровня в виде блока JSON в итоговом YAML. Например, если вы хотите настроить определённое поле в [JSON-файле сервисного аккаунта](https://docs.getdbt.tech/docs/local/connect-data-platform/bigquery-setup.md?version=1.12#service-account-json) для подключения к BigQuery (например, 'project\_id' или 'client\_email'), необходимо с помощью расширенных атрибутов переопределить целиком основной ключ/атрибут верхнего уровня `keyfile_json`. Включите вложенные поля в виде вложенного блока JSON.

## Создание окружения разработки

Чтобы создать новое окружение разработки dbt:

1. Перейдите в **Orchestration** > **Environments**.
2. Нажмите **+ Create Environment**.
3. Выберите **Development** в качестве типа окружения. Для одного проекта можно создать только одно окружение Development.
4. Заполните поля в разделах **Environment settings** и **User credentials**.
5. (Необязательно) Если в вашем аккаунте включена функция dbt State, появится параметр **Enable dbt State**. Включите его, чтобы сократить количество ненужных повторных сборок узлов. Подробнее см. в разделе [Включение dbt State в Studio](https://docs.getdbt.tech/docs/deploy/dbt-state-enable-studio.md#enabling-dbt-state-on-a-development-environment).
6. Нажмите **Save**, чтобы создать окружение.

[![Создание окружения разработки](/img/docs/dbt-platform/refresh-ide/new-development-environment-fields.png?v=2 "Создание окружения разработки")](#)Создание окружения разработки

[]()

### Настройка учетных данных пользователя

Для работы с dbt Studio IDE или dbt platform CLI каждому разработчику необходимо настроить [личные учетные данные](https://docs.getdbt.tech/docs/platform/studio-ide/develop-in-studio.md#get-started-with-the-studio-ide) для подключения к хранилищу. Нажмите на имя своего аккаунта в левом нижнем углу, выберите **Your profile**, затем перейдите в раздел **Credentials**. Это позволяет отдельно настроить целевую базу данных и схему и использовать индивидуальные учетные данные для подключения к хранилищу.

## Окружение развертывания

Окружения развертывания в dbt необходимы для выполнения заданий по расписанию и использования других возможностей (например, отдельных рабочих пространств для разных задач). В одном проекте dbt может быть несколько окружений, что позволяет настроить каждое из них под определенные потребности (например, для экспериментов или тестирования).

Несмотря на возможность иметь несколько окружений, только одно из них может быть «основным» окружением развертывания. Оно считается вашим «производственным» окружением и представляет собой «источник истины» проекта: именно в нем находятся наиболее надежные и окончательные преобразования данных.

Подробнее об окружениях развертывания dbt и их настройке см. на странице [Окружения развертывания](https://docs.getdbt.tech/docs/deploy/deploy-environments.md). Рекомендации по их использованию приведены в руководстве [Рекомендации по работе с окружениями dbt](https://docs.getdbt.tech/guides/set-up-ci.md).

## Изменение настроек окружения

Чтобы изменить настройки среды (например, её имя, учётные данные или версию dbt):

1. Перейдите в **Orchestration** > **Environments**.
2. Нажмите **имя среды**, настройки которой хотите изменить.
3. Нажмите **Settings**, затем **Edit**.
4. Измените нужные поля. Например, можно изменить имя среды или версию dbt (для подходящих тарифных планов и поддерживаемых адаптеров **v2 Stable** используется по умолчанию для новых сред развёртывания).
5. Нажмите **Save**, чтобы применить изменения.

Подробную информацию о доступных настройках см. в разделе [Общие настройки среды](https://docs.getdbt.tech/docs/dbt-platform-environments.md#common-environment-settings) в приведённом выше описании сред.

## Удаление окружения

Удаление окружения автоматически удаляет связанные с ним задания (job). Если вы хотите сохранить эти задания, сначала переместите их в другое окружение.

Чтобы удалить окружение в dbt, выполните следующие действия:

1. Перейдите в раздел **Orchestration** > **Environments**.
2. Выберите окружение, которое хотите удалить.
3. Нажмите **Settings** в правом верхнем углу страницы, а затем нажмите **Edit**.
4. Прокрутите страницу вниз и нажмите **Delete**, чтобы удалить окружение.

[![Удаление окружения](/img/docs/dbt-platform/platform-configuring-dbt-platform/delete-environment.png?v=2 "Удаление окружения")](#)Удаление окружения

5. Подтвердите действие во всплывающем окне, нажав **Confirm delete** в правом нижнем углу, чтобы немедленно удалить окружение. Это действие нельзя отменить. Однако вы можете создать новое окружение с теми же параметрами, если удаление было выполнено по ошибке.
6. Обновите страницу — удалённое окружение должно исчезнуть. Чтобы удалить несколько окружений, необходимо выполнить эти шаги для каждого из них.

Если у вас возникли какие-либо проблемы, вы всегда можете [связаться с нами](mailto:support@getdbt.com) для получения дополнительной помощи.

## Мониторинг заданий

На странице **Environments** есть два раздела, которые дают обзор заданий для выбранного окружения:

* **In progress** — Список заданий, которые в данный момент выполняются, с информацией о времени запуска
* **Top jobs by models built** — Ранжирует задания по количеству построенных моделей за определённый период времени

[![Текущие задания и рейтинг по числу построенных моделей](/img/docs/deploy/in-progress-top-jobs.png?v=2 "Текущие задания и рейтинг по числу построенных моделей")](#)Текущие задания и рейтинг по числу построенных моделей

## История настроек окружения

Вы можете просмотреть историю изменений настроек окружения за последние 90 дней.

Чтобы просмотреть историю изменений:

1. В главном меню перейдите в **Orchestration** и нажмите **Environments**.
2. Нажмите на **название окружения**.
3. Нажмите **Settings**.
4. Нажмите **History**.

[![Пример элемента интерфейса для просмотра истории окружения.](/img/docs/deploy/environment-history.png?v=2 "Пример элемента интерфейса для просмотра истории окружения.")](#)Пример элемента интерфейса для просмотра истории окружения.
