# Оптимизация статического анализа для разработки и развертывания

Важно

dbt v2 доступен для установки в следующих средах:

* [Локальные инструменты командной строки (CLI)](https://docs.getdbt.tech/docs/local/install-dbt.md?version=2)
* [VS Code и Cursor с расширением dbt](https://docs.getdbt.tech/docs/install-dbt-extension.md)
* [Среды dbt platform](https://docs.getdbt.tech/docs/dbt-versions/upgrade-dbt-platform-version.md#dbt-v2)

Присоединяйтесь к обсуждению в канале [`#dbt-v2`](https://getdbt.slack.com/archives/C088YCAB6GH) в Slack сообщества dbt.

Статический анализ помогает dbt v2 проверять SQL до его выполнения. В этом руководстве показано, как настроить его для более строгих проверок при разработке и более быстрых запусков с меньшим риском блокировки при развертывании.

В этом руководстве объясняется, почему использование `strict` при разработке и `baseline` (более легкого режима статического анализа, используемого по умолчанию) при развертывании — обоснованный и рекомендуемый подход, а также как настроить его в проекте dbt v2. Подробнее о режимах и возможностях см. в разделе [О статическом анализе](https://docs.getdbt.tech/docs/build/about-static-analysis.md).

## Почему стоит использовать этот подход

* **Разработка:** режим `strict` обеспечивает наиболее строгие проверки SQL перед переносом изменений в другие среды, а также расширенные возможности на уровне столбцов в расширении VS Code.
* **Развертывание:** режим `baseline` пропускает загрузку схем из удаленного хранилища данных и выводит обнаруженные проблемы как предупреждения, поэтому задания реже блокируются. Это может сократить время компиляции (и затраты на хранилище данных) при развертывании, особенно в проектах с большим количеством источников. Просматривайте журналы развертывания на предмет предупреждений, которые режим `strict` при разработке выдал бы как ошибки.

Режим `strict` может увеличить время компиляции, поскольку dbt v2 загружает схемы всех источников (включая те, на которые ваши модели не ссылаются). Команды, работающие с тысячами источников, отмечали значительную разницу между `baseline` и `strict`.

## Настройка режима с помощью флага CLI

Используйте флаг [`--static-analysis`](https://docs.getdbt.tech/reference/global-configs/static-analysis-flag.md), чтобы задать режим для одного запуска.

**Разработка:**

```bash
dbt compile --static-analysis strict
```

**Развертывание:**

```bash
dbt compile --static-analysis baseline
```

Тот же флаг можно использовать с `dbt run` или `dbt build`. Если наряду с dbt v2 у вас уже установлен dbt v1 или CLI платформы, используйте `dbtf`, чтобы однозначно вызвать dbt v2.

Вы также можете настроить [`static_analysis`](https://docs.getdbt.tech/reference/resource-configs/static-analysis.md) для отдельного каталога или модели. Примеры см. в разделе [Настройка `static_analysis`](https://docs.getdbt.tech/docs/build/about-static-analysis.md#configuring-static_analysis).

## Настройка режима с помощью переменной окружения

Вы также можете управлять [`static_analysis`](https://docs.getdbt.tech/reference/resource-configs/static-analysis.md) через пользовательскую переменную окружения в `dbt_project.yml`. Это удобно, если для разработки и развертывания используется одна конфигурация проекта, но задаются разные значения переменных окружения.

dbt\_project.yml

```yml
models:
  my_project:
    +static_analysis: "{{ env_var('DBT_ENV_STATIC_ANALYSIS', 'baseline') }}"
```

Затем задайте переменную для каждой среды:

* Разработка: `DBT_ENV_STATIC_ANALYSIS=strict`
* Развертывание: оставьте переменную незаданной (по умолчанию используется `baseline`) или задайте `DBT_ENV_STATIC_ANALYSIS=baseline`

`DBT_ENV_STATIC_ANALYSIS` — это имя пользовательской переменной, которое вы выбираете сами. Она не связана со встроенной переменной `DBT_STATIC_ANALYSIS`, используемой для переопределения режима вместе с флагом CLI.

Подробнее об `env_var` см. в разделах [Об env\_var](https://docs.getdbt.tech/reference/dbt-jinja-functions/env_var.md) и [Переменные окружения](https://docs.getdbt.tech/docs/build/environment-variables.md).

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

* [О статическом анализе](https://docs.getdbt.tech/docs/build/about-static-analysis.md)
* [Параметр конфигурации `static_analysis`](https://docs.getdbt.tech/reference/resource-configs/static-analysis.md)
* [Флаг `--static-analysis`](https://docs.getdbt.tech/reference/global-configs/static-analysis-flag.md)
