# compute

Доступно в v2

Настройка compute определяет, где выполняется юнит-тест: на вашей платформе данных или локально с DuckDB.

Доступно в v2 при явном включении

Настройка `compute` доступна только в v2. В v1 она недоступна и будет проигнорирована. Чтобы перейти на v2, обратитесь к руководству [Обновление до v2](https://docs.getdbt.tech/docs/dbt-versions/dbt-upgrade/upgrading-to-v2.md). Использование `compute: local` для юнит-теста — экспериментальная возможность. Перед её использованием установите переменную окружения `DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS` в значение `true`:

```bash
export DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS=true
```

Без этой переменной dbt завершает работу с ошибкой недопустимой конфигурации, в которой указано имя переменной.

По умолчанию каждый юнит-тест отправляет запрос на вашу платформу данных и ожидает результата. Это может замедлять тестирование и расходовать вычислительные ресурсы хранилища.

Используйте настройку `compute: local`, чтобы запускать [юнит-тесты](https://docs.getdbt.tech/docs/build/unit-tests.md) локально с DuckDB, быстрее получать обратную связь при разработке и контролировать затраты на вычислительные ресурсы хранилища.

models/filename.yml

```yml
unit_tests:
  - name: unit_test_name
    model: model_name
    config:
      compute: local | remote
```

dbt\_project.yml

```yml
unit_tests:
  resource-path:
    +compute: local | remote
```

## Определение

Вы можете задать `compute` для [юнит-тестов](https://docs.getdbt.tech/docs/build/unit-tests.md): как для отдельного теста в YAML-файле свойств, так и для группы тестов в YAML-файле проекта (`dbt_project.yml`).

Для `compute` доступны следующие значения:

* `local`: выполнять юнит-тест с DuckDB там, где запущен dbt. На вашу платформу данных ничего не отправляется, поэтому тест быстро возвращает результат и не использует вычислительные ресурсы хранилища.
* `remote` (по умолчанию): отправлять юнит-тест на вашу платформу данных для выполнения с использованием вычислительных ресурсов хранилища, как и любой другой запрос. Поскольку это значение используется по умолчанию, задавать его явно нужно только для того, чтобы исключить тест из действия настройки `+compute: local`, заданной на уровне проекта.

Локальное выполнение доступно для Snowflake и BigQuery. В сообщениях об ошибках также может встречаться `sidecar` — это то же самое, что и `local`.

Настройка отдельного юнит-теста переопределяет настройку на уровне проекта. Поэтому, если вы зададите `+compute: local` в `dbt_project.yml` и `compute: remote` для одного теста, этот тест будет выполняться на вашей платформе данных, а остальные — локально.

В файле проекта:

dbt\_project.yml

```yml
unit_tests:
  my_project:
    +compute: local
```

Затем для отдельного теста:

models/filename.yml

```yml
unit_tests:
  - name: test_revenue_calculation
    model: fct_revenue
    config:
      compute: remote
```

#### Что нужно знать о локальном выполнении

* Настройка `compute: local` отклоняется, если в окружении, где запущен dbt, не задано `DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS=true`. Это относится как к настройке отдельного теста, так и к `+compute: local` в `dbt_project.yml`.
* Ваш SQL должен поддаваться преобразованию в SQL для DuckDB. Функции, специфичные для платформы и не имеющие эквивалента в DuckDB, приводят к ошибке, а режим `local` не переключается на вашу платформу данных при сбое — ошибка преобразования означает ошибку теста.
* Чтобы преобразовать ваш SQL, при первом запуске теста dbt получает с вашей платформы данных схемы моделей, от которых тестируемая модель зависит напрямую, а затем кеширует их для последующих запусков. Эти модели должны уже существовать на вашей платформе данных.
* Настройка `compute: local` также устанавливает для [`static_analysis`](https://docs.getdbt.tech/reference/resource-configs/static-analysis.md) значение `strict` для этого теста, поскольку для преобразования SQL при локальном выполнении необходим строгий анализ. Если задать для теста `static_analysis: off`, он не сможет выполняться локально и завершится с ошибкой.

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

* [Локальный запуск юнит-тестов](https://docs.getdbt.tech/docs/build/unit-tests.md#run-unit-tests-locally)
* [Юнит-тесты](https://docs.getdbt.tech/docs/build/unit-tests.md)
* [О свойстве unit\_tests](https://docs.getdbt.tech/reference/resource-properties/unit-tests.md)
* [static\_analysis](https://docs.getdbt.tech/reference/resource-configs/static-analysis.md)
