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

compute

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

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

Настройка compute доступна только в v2. В v1 она недоступна и будет проигнорирована. Чтобы перейти на v2, обратитесь к руководству Обновление до v2. Использование compute: local для юнит-теста — экспериментальная возможность. Перед её использованием установите переменную окружения DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS в значение true:

export DBT_ENGINE_EXPERIMENTAL_LOCAL_UNIT_TESTS=true

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

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

Используйте настройку compute: local, чтобы запускать юнит-тесты локально с DuckDB, быстрее получать обратную связь при разработке и контролировать затраты на вычислительные ресурсы хранилища.

models/filename.yml
unit_tests:
- name: unit_test_name
model: model_name
config:
compute: local | remote
dbt_project.yml
unit_tests:
resource-path:
+compute: local | remote

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

Вы можете задать compute для юнит-тестов: как для отдельного теста в 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
unit_tests:
my_project:
+compute: local

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

models/filename.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 значение strict для этого теста, поскольку для преобразования SQL при локальном выполнении необходим строгий анализ. Если задать для теста static_analysis: off, он не сможет выполняться локально и завершится с ошибкой.

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

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

0
Loading