SQL 파싱
SQL 파싱 (SQL parse)
dbt는 SQL을 파싱할 때 Python sqlparse 라이브러리를 사용해요. 크거나 복잡한 쿼리의 경우 sqlparse가 토큰을 그룹화하는 방식을 조정해서 성능 문제나 파싱 한계를 피할 수 있어요.
출처: 문서
본문
dbt는 SQL을 파싱할 때 Python sqlparse 라이브러리를 사용해요. 크거나 복잡한 쿼리의 경우 성능 문제나 파싱 한계를 피하기 위해 sqlparse가 토큰을 그룹화하는 방식을 조정해야 할 수 있어요.
--sqlparse 플래그를 사용해 sqlparse가 토큰을 그룹화하는 방식을 조정할 수 있어요. 이는 sqlparse Security and Performance Considerations 문서에 설명된 그룹화 한계에 해당해요.
지원되는 키:
| Key | What it does |
|---|---|
| MAX_GROUPING_DEPTH | Sets the maximum nesting depth when grouping tokens |
| MAX_GROUPING_TOKENS | Sets the maximum number of tokens that can be grouped at once |
각 키는 정수나 null 값 하나를 받아요. 두 키의 기본값은 null이며, 이는 dbt가 사용자 지정 한계를 적용하지 않는다는 뜻이에요.
sqlparse는 과도한 리소스 사용을 막기 위해 내장 한계(MAX_GROUPING_DEPTH = 100 및 MAX_GROUPING_TOKENS = 10000)를 적용해요. 값을 null로 설정하면 한계가 완전히 비활성화돼요.
예를 들어 다음 명령은 두 그룹화 한계를 모두 설정해요:
dbt compile --sqlparse '{"MAX_GROUPING_DEPTH": 200, "MAX_GROUPING_TOKENS": 20000}'
한 키만 구성해 단일 한계를 설정할 수도 있어요. 지정하지 않은 키는 기본값인 null이에요. 다음 예시에서는 depth 한계만 500으로 올리고, MAX_GROUPING_TOKENS는 설정하지 않아 sqlparse가 이 실행에서 토큰 한계를 적용하지 않아요.
dbt compile --sqlparse '{"MAX_GROUPING_DEPTH": 500}'
키를 제공하지 않으면 두 한계 모두 설정되지 않은 상태(null)로 남고 sqlparse는 그룹화 한계를 적용하지 않아요.
--sqlparse는 다음 명령과 함께 사용할 수 있어요:
- dbt compile
- dbt run
- dbt build
- dbt test
- dbt seed
- dbt snapshot
- dbt source freshness
- dbt docs generate
- dbt show
더 알아보기 (Learn more)
- About global configs — 전역 구성
- sqlparse Security and Performance Considerations — sqlparse 그룹화 한계 상세