이 문서는 데이터 웨어하우징 섹션의 일부입니다.
왜 쿼리 최적화가 중요한가요?
동일한 데이터를 조회하더라도, 쿼리를 어떻게 작성하고 테이블을 어떻게 구성하느냐에 따라 실행 시간이 수십 배 차이날 수 있습니다. 대시보드의 응답 속도, ETL 파이프라인의 처리 시간, 그리고 컴퓨팅 비용(DBU) 에 직접적으로 영향을 미칩니다. 이 문서에서는 Databricks에서 쿼리 성능을 극대화하기 위한 핵심 기술과 모범 사례를 상세히 다루겠습니다.1. Liquid Clustering — 차세대 데이터 레이아웃 최적화
개념
💡 Liquid Clustering 은 데이터를 지정한 컬럼 기준으로 물리적으로 가까이 배치 하여, 쿼리 시 불필요한 파일 읽기를 최소화하는 기술입니다. 기존의 파티셔닝(Partitioning)과 Z-Order를 대체하는 Databricks의 최신 최적화 기술입니다.
왜 기존 방식을 대체하나요?
사용 방법
Clustering 컬럼 선택 가이드
Liquid Clustering의 동작 원리
OPTIMIZE 전후 비교WHERE region = '서울' AND order_date >= '2025-03-01' 쿼리를 실행하면:
- 최적화 전: 3개 파일을 모두 스캔해야 합니다
- 최적화 후: 파일 2만 스캔하면 됩니다 → 데이터 스캔량 2/3 감소
2. Predictive Optimization — 자동 최적화
개념
💡 Predictive Optimization 은 Databricks가 테이블의 사용 패턴을 분석하여, OPTIMIZE와 VACUUM을 자동으로 실행 해 주는 기능입니다. 사용자가 직접 스케줄을 관리할 필요가 없습니다.
활성화 방법
자동으로 수행하는 작업
⚠️ 요구 사항: Predictive Optimization은 Unity Catalog의 Managed Table 에서만 사용할 수 있습니다. External Table에서는 사용할 수 없습니다.
3. Query Profile — 쿼리 성능 분석
Query Profile 읽는 방법
SQL Editor에서 쿼리를 실행한 후 Query Profile 탭을 클릭하면, 실행 계획을 시각적으로 확인할 수 있습니다.핵심 메트릭
성능 개선 판단 플로우
쿼리 성능 문제 해결 가이드4. SQL 쿼리 작성 최적화
SELECT * 피하기
💡 Delta Lake는 컬럼 기반(Columnar) 포맷인 Parquet로 데이터를 저장합니다. SELECT *는 모든 컬럼의 데이터를 읽지만, 필요한 컬럼만 지정하면 해당 컬럼의 데이터만 읽으므로 I/O가 크게 줄어듭니다.
JOIN 최적화
💡 브로드캐스트 JOIN(Broadcast JOIN)이란? 작은 테이블을 모든 노드에 복사하여, 큰 테이블의 데이터를 이동(Shuffle)하지 않고 각 노드에서 바로 조인하는 방식입니다. 한쪽 테이블이 충분히 작을 때(일반적으로 수십MB 이하) 매우 효과적입니다.
서브쿼리보다 CTE 사용
효율적인 필터링
5. 테이블 통계 관리
💡 통계(Statistics) 는 쿼리 최적화기(Query Optimizer)가 최적의 실행 계획을 수립하는 데 사용됩니다. 예를 들어, 테이블의 행 수, 컬럼의 고유값 수, 최소/최대값 등을 알면 JOIN 순서나 필터 적용 순서를 더 효율적으로 결정할 수 있습니다.