현업 사례: 월별 매출 크로스탭을 매번 수동으로 만들던 시절
🔥 이것은 거의 모든 데이터 분석 조직에서 겪는 비효율입니다.현업에서는 “월별 매출을 제품별로 보고 싶어요”라는 요청이 매주, 때로는 매일 옵니다. PIVOT을 모르면 어떤 일이 벌어지는지 살펴보겠습니다.
PIVOT 없이 리포트 만드는 고통
💡 PIVOT을 사용하면 위 코드가 10줄 이내로 줄어듭니다. 하지만 PIVOT에도 한계가 있습니다.
동적 PIVOT의 한계와 우회 방법
SQL PIVOT의 가장 큰 제약: 값을 미리 알아야 합니다
Databricks SQL의PIVOT은 IN 절에 피벗할 값을 명시적으로 나열 해야 합니다. 즉, 제품명이 뭐가 있는지 미리 알아야 합니다. 새 제품이 추가되면 쿼리를 수정해야 합니다.
우회 방법 1: 2단계 쿼리 (가장 실용적)
우회 방법 2: 임시 뷰 + 매개변수화
💡 현업 팁: 대시보드에서 크로스탭이 필요할 때는 PIVOT 쿼리를 쓰는 것보다 Lakeview의 피벗 테이블 시각화 를 사용하는 것이 훨씬 편합니다. SQL PIVOT은 ETL 파이프라인에서 데이터를 넓은(wide) 형태로 변환할 때 주로 사용합니다.
실전 리포트 생성 패턴
패턴 1: YoY(전년 대비) 비교 크로스탭
| month_name | 2024 | 2025 | yoy_growth |
|---|---|---|---|
| Jan | 1,200,000 | 1,500,000 | 25.0% |
| Feb | 1,100,000 | 1,400,000 | 27.3% |
| Mar | 1,300,000 | 1,250,000 | -3.8% |
패턴 2: EAV(Entity-Attribute-Value) 데이터 정규화 (UNPIVOT)
패턴 3: 멀티 메트릭 대시보드용 PIVOT
💡 현업에서 가장 중요한 팁: PIVOT/UNPIVOT은 도구 일 뿐입니다. 최종 사용자에게 보여줄 리포트라면 Lakeview 대시보드의 피벗 테이블 시각화가 훨씬 빠르고 유연합니다. SQL PIVOT은 데이터 파이프라인에서 형태를 변환 하거나, 다른 시스템에 넓은 형태로 내보낼 때 진가를 발휘합니다.
PIVOT 성능 최적화 팁
현업에서 대용량 데이터에 PIVOT을 적용할 때 알아두면 좋은 성능 팁입니다.| 상황 | 문제 | 해결 방법 |
|---|---|---|
| 피벗 대상 값이 1,000개 이상 | 컬럼이 너무 많아 메모리 부족 | 상위 N개만 필터링 후 PIVOT |
| 원본 테이블이 10억 행 이상 | PIVOT이 매우 느림 | 먼저 GROUP BY로 집계한 결과에 PIVOT |
| 매일 돌아가는 리포트 | 매번 전체 데이터를 PIVOT | 집계 테이블(Gold Table)을 만들고 증분 업데이트 |
정리
| 핵심 개념 | 설명 |
|---|---|
| PIVOT | 특정 컬럼의 고유 값을 새 컬럼으로 변환하여 크로스탭을 생성합니다 |
| UNPIVOT | 여러 컬럼을 하나의 값 컬럼과 카테고리 컬럼으로 합칩니다 |
| 집계 함수 | PIVOT에서는 SUM, COUNT, AVG 등 집계 함수가 필수입니다 |
| NULL 처리 | UNPIVOT은 기본적으로 NULL을 제외합니다 (INCLUDE NULLS로 변경 가능) |
| CASE WHEN 대안 | PIVOT 구문 대신 수동으로 CASE WHEN을 사용할 수도 있습니다 |