Amazon Redshift 어댑터 동작 변경
Amazon Redshift 어댑터 동작 변경 (Amazon Redshift adapter behavior changes)
dbt-redshift에 특화된 동작 변경 플래그들을 다뤄요. 특히 autocommit 환경에서 불필요한 BEGIN/COMMIT/ROLLBACK 문을 생략해 성능을 개선하는 플래그를 설명해 드릴게요.
출처: 문서
본문
다음은 dbt-redshift에 특화된 현재의 동작 변경 플래그 목록이에요:
| Flag | dbt-redshift: Intro | dbt-redshift: Maturity | Status |
|---|---|---|---|
| redshift_skip_autocommit_transaction_statements | 1.12.0 | TBD | Active |
redshift_skip_autocommit_transaction_statements 플래그
dbt-redshift 1.12.0부터 사용할 수 있어요.
redshift_skip_autocommit_transaction_statements 플래그는 autocommit이 활성화되어 있을 때 dbt가 Amazon Redshift에 명시적인 BEGIN, COMMIT, ROLLBACK 문을 보낼지 제어해요. dbt-redshift 1.5부터 기본 Redshift 연결은 autocommit=True를 사용하므로 드라이버가 이미 각 문을 커밋해요. 그런 설정에서는 이 문들이 autocommit 활성화 시 중복되며 Redshift에 불필요한 왕복(round trip)을 추가해요.
false(기본값)로 설정하면 dbt는 BEGIN, COMMIT, ROLLBACK 문을 보내요(레거시 동작).
true로 설정하면 dbt는 Redshift에 BEGIN, COMMIT, ROLLBACK 문을 보내지 않아요. 이렇게 하면 왕복이 줄어 성능이 개선될 수 있어요. dbt는 여전히 연결에서 begin(), commit(), rollback_if_open()을 호출하지만, 해당 SQL은 더 이상 실행하지 않아요:
begin()은 호출되지만 dbt는 Redshift에서 BEGIN을 실행하지 않아요.commit()은 호출되지만 dbt는 Redshift에서 COMMIT을 실행하지 않아요.rollback_if_open()은 호출되지만 dbt는 Redshift에서 ROLLBACK을 실행하지 않아요.
dbt는 내부 transaction_open 상태를 계속 유지하므로 이 SQL 문들이 생략되어도 트랜잭션 추적은 일관되게 유지돼요.
autocommit 활성화 시 불필요한 트랜잭션 문을 생략하려면 dbt_project.yml에서 플래그를 true로 설정해요:
dbt_project.yml
flags:
redshift_skip_autocommit_transaction_statements: true
이 플래그와 autocommit의 상호작용
- 연결이
autocommit=False를 사용하면 dbt의 명시적 트랜잭션 동작은 변하지 않아요. - 연결이
autocommit=True(기본값)이고 플래그가false(기본값)이면 dbt는 여전히 BEGIN, COMMIT, ROLLBACK을 보내요. - 연결이
autocommit=True이고 플래그가true이면 dbt는 이 문들을 생략해요.
더 알아보기 (Learn more)
- dbt-redshift 어댑터 — Redshift 연결 설정
- About global configs — 전역 구성