커스텀 마이크로배치 전략
커스텀 마이크로배치 전략 (Custom microbatch strategy)
require_batched_execution_for_custom_microbatch_strategy 플래그는 커스텀 get_incremental_microbatch_sql 매크로가 있을 때만 관련돼요. 마이크로배치 전략을 쓰는 모델을 dbt가 배치로 실행할지 제어해요. 이 플래그는 v2에서 제거됐고 새 동작이 항상 활성화돼요.
출처: 문서
본문
이 플래그는 v2에서 제거됐어요. 새 동작이 항상 활성화돼요. 업그레이드한다면 dbt_project.yml에서 이 플래그를 제거해요.
| require_batched_execution_for_custom_microbatch_strategy | dbt v1 Latest | dbt v1 |
|---|---|---|
| Introduced | 2024.11 | 1.9.0 |
Matured (default → true) |
2026.09 | 1.12.0 |
| Removed | — | v2.0 |
require_batched_execution_for_custom_microbatch_strategy 플래그는 프로젝트에 커스텀 get_incremental_microbatch_sql 매크로가 이미 있을 때만 관련돼요. 커스텀 마이크로배치 매크로가 없다면 이 플래그를 설정할 필요가 없어요 — dbt가 마이크로배치 전략을 쓰는 모든 모델에 대해 자동으로 마이크로배칭을 처리해요.
dbt v1.12부터 이 플래그는 기본값이 true로, dbt가 커스텀 마이크로배치 전략을 배치로 실행해요. 커스텀 마이크로배치 매크로가 있고 플래그를 false로 설정하면 dbt가 deprecation 경고를 발생시켜요.
이전에는 기존 커스텀 인크리멘탈 전략과 의도치 않은 상호작용을 막으려면 DBT_EXPERIMENTAL_MICROBATCH 환경 변수를 true로 설정해야 했어요. 이제 DBT_EXPERIMENTAL_MICROBATCH를 설정해도 런타임 기능에 아무 영향이 없어요.
영향
이 플래그는 프로젝트에 커스텀 get_incremental_microbatch_sql 매크로가 있을 때만 관련돼요. 커스텀 마이크로배치 매크로가 없는 프로젝트는 영향을 받지 않아요 — 내장 매크로는 이미 배치로 실행돼요.
get_incremental_microbatch_sql을 오버라이드했다면 — 주로 어댑터 제한을 우회하거나 커스텀 파티션 전략을 구현하기 위해 — 매크로가 작성된 적 없는 배치 계약(batched contract) 아래에서 호출돼요. 가능한 결과:
- 매크로가 더 작은
event_time_start/event_time_end윈도우를 무시하고 매 배치마다 전체 범위를 다시 처리해, 낭비되는 컴퓨팅, 중복 행, 또는MERGE/INSERT충돌을 유발. - 매크로가 실행당 단일 호출을 기대해 오류 발생.
- 대상 테이블의 행 수가 플래그 값에 따라 달라짐.
권장 조치
마이크로배치 모델이 실행 중간에 오류가 나거나, 중복 행 또는 MERGE/INSERT 충돌이 생기거나, 매 배치마다 전체 날짜 범위를 다시 처리한다면, get_incremental_microbatch_sql 매크로가 event_time_start / event_time_end 윈도우로 필터링하는지 확인해요. 하드코딩된 날짜 필터(예: where event_ts >= current_date - interval '1 day')를 사용하거나 _dbt_max_partition만 읽는다면, 매크로가 배치별 윈도우를 무시하고 매 반복마다 전체 범위를 다시 처리하는 거예요.
수정하려면 매크로가 배치별 윈도우를 쓰도록 다시 작성해요:
{% macro get_incremental_microbatch_sql(arg_dict) %}
{%- set target = arg_dict["target_relation"] -%}
{%- set source = arg_dict["temp_relation"] -%}
{%- set event_time = arg_dict["incremental_predicates"] -%}
-- Use the per-batch window dbt passes via event_time_start/event_time_end
-- (exposed through arg_dict["incremental_predicates"] or model.config.event_time_*),
-- NOT a hard-coded date filter.
insert into {{ target }}
select * from {{ source }}
{% endmacro %}
검증하려면 단일 배치에 대해 dbt run --event-time-start <date> --event-time-end <date> -s <model>을 실행하고 행 수가 그 단일 날짜와 일치하는지 확인해요.
이 동작을 옵트아웃하려면 플래그를 false로 설정해요:
dbt_project.yml
flags:
require_batched_execution_for_custom_microbatch_strategy: false
더 알아보기 (Learn more)
- 인크리멘탈 마이크로배치 — 마이크로배치 전략
- 동작 변경(Behavior changes)