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

Параллельное выполнение microbatch

Используйте parallel batch execution, чтобы быстрее обрабатывать ваши microbatch‑модели.

Стратегия microbatch даёт преимущество обновления модели небольшими, более управляемыми батчами. В зависимости от вашего сценария использования, настройка microbatch‑моделей на параллельное выполнение может обеспечить более быструю обработку по сравнению с последовательным запуском батчей.

Параллельное выполнение батчей означает, что несколько батчей обрабатываются одновременно, а не один за другим (последовательно), что ускоряет выполнение microbatch‑моделей.

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

Например, если у вас есть microbatch‑модель с 12 батчами, вы можете настроить их выполнение в параллельном режиме. Фактически они будут выполняться параллельно с ограничением по количеству доступных потоков.

Предварительные требования

Для использования параллельного выполнения необходимо выполнить следующие условия:

  • Использовать Snowflake как поддерживаемый адаптер.
    • В будущем мы продолжим тестировать и добавлять поддержку конкурентного выполнения для других адаптеров.
  • Батч может быть запущен параллельно только если:
    • Это не первый батч.
    • Это не последний батч.

Как работает параллельное выполнение батчей

После проверки условий из раздела Prerequisites, и если значение concurrent_batches не задано, dbt интеллектуально определяет, использует ли модель Jinja‑функцию {{ this }}. Если модель ссылается на {{ this }}, батчи будут выполняться последовательно, так как {{ this }} представляет собой отношение текущей модели в базе данных, и одновременные обращения к одному и тому же объекту вызывают конфликт.

В противном случае, если {{ this }} не обнаружен (и выполнены остальные условия), батчи будут выполняться параллельно. Это поведение можно переопределить, если вы зададите значение для concurrent_batches.

Параллельное или последовательное выполнение

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

  • Параллельное выполнение батчей работает быстрее, но требует логики, независимой от порядка выполнения батчей. Например, если вы разрабатываете data‑pipeline для системы, которая обрабатывает пользовательские транзакции батчами, каждый батч может выполняться параллельно для повышения производительности. При этом логика обработки каждой транзакции не должна зависеть от порядка запуска или завершения батчей.
  • Последовательная обработка медленнее, но необходима для вычислений, таких как накопительные метрики в microbatch‑моделях. Она обрабатывает данные в корректном порядке, позволяя каждому шагу опираться на предыдущий.

Конфигурация concurrent_batches

По умолчанию dbt автоматически определяет, могут ли батчи выполняться параллельно для microbatch‑моделей, и в большинстве случаев это работает корректно. Однако вы можете переопределить это поведение, задав конфигурацию concurrent_batches в файле dbt_project.yml или в .sql‑файле модели, чтобы явно указать параллельное или последовательное выполнение, при условии что выполнены все conditions:

dbt_project.yml
models:
+concurrent_batches: true # value set to true to run batches in parallel

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

0
Loading