이 문서는 레이크하우스 아키텍처 섹션의 일부입니다.
왜 Liquid Clustering이 필요한가요?
데이터가 쌓이면 쿼리 성능은 자연스럽게 느려집니다. 수억 행의 테이블에서 특정 조건의 데이터를 찾으려면, 관련 없는 파일까지 모두 읽어야 하기 때문입니다. 이 문제를 해결하기 위해 기존에는 파티셔닝(Partitioning) 과 Z-Order 를 사용했지만, 각각 뚜렷한 한계가 있었습니다.기존 방식의 한계
Hive 스타일 파티셔닝의 문제
Z-Order의 한계
Liquid Clustering이란?
💡 Liquid Clustering 은 Databricks가 도입한 차세대 데이터 레이아웃 최적화 기술 입니다. 기존의 Hive 파티셔닝과 Z-Order를 대체하며, 데이터를 증분 방식으로 자동 재배치 하여 쿼리 성능을 최적화합니다.
참고: Databricks: Use Liquid Clustering for Delta tables핵심 차이는 “유동적(Liquid)“이라는 이름에 담겨 있습니다. 기존 파티셔닝이 데이터를 고정된 칸 에 넣는 방식이라면, Liquid Clustering은 데이터가 자유롭게 흘러 최적의 위치에 배치되도록 합니다.
사용 방법
테이블 생성 시 활성화
기존 테이블에 적용
클러스터링 키 변경
클러스터링 제거
클러스터링 트리거
💡 Liquid Clustering은 증분 방식 으로 동작합니다. OPTIMIZE를 실행하면 아직 클러스터링되지 않은 새 데이터만 처리하므로, 매번 전체 데이터를 재정렬하는 Z-Order보다 훨씬 효율적입니다.
클러스터링 키 선택 기준
적절한 클러스터링 키를 선택하는 것이 성능 최적화의 핵심입니다.좋은 예시와 나쁜 예시
Hive 파티셔닝 vs Z-Order vs Liquid Clustering 비교
성능 이점
Liquid Clustering을 적절히 설정하면 다음과 같은 성능 향상을 기대할 수 있습니다.Data Skipping 동작 예시
모범 사례
현장에서 배운 것들: 파티셔닝과 클러스터링의 현실
파티셔닝을 잘못 설계해서 소형 파일 100만 개가 생긴 프로젝트
이건 제가 실제로 겪은 사례입니다. 한 이커머스 고객이 주문 테이블을PARTITIONED BY (order_date, store_id, category) 세 컬럼으로 파티셔닝했습니다. 얼핏 보면 합리적으로 보이지만, 결과는 참담했습니다.
⚠️ 많은 팀이 이 실수를 합니다: “파티셔닝은 많이 할수록 좋다”는 잘못된 믿음. 파티션 키의 카디널리티 곱이 10,000을 넘으면 거의 확실히 Small File Problem이 발생합니다. 파티션 수가 적을수록 좋고, 아예 안 하는 것이 나을 때가 많습니다.
클러스터링 키 선택: 실전에서 배운 원칙들
교과서에는 “자주 필터링하는 컬럼을 선택하세요”라고만 나옵니다. 하지만 현업에서는 그것만으로 부족합니다.원칙 1: 단일 키 vs 복합 키 — 언제 무엇을?
💡 현업 팁: 4개 이상의 클러스터링 키는 효과가 급감합니다. 키가 많아질수록 각 키의 데이터 스킵 효과가 희석되기 때문입니다. 저는 실전에서 2개를 기본으로, 매우 특별한 경우에만 3개를 사용합니다.
원칙 2: 카디널리티 스위트 스팟 찾기
원칙 3: 쿼리 로그 분석으로 키 결정하기
감으로 키를 정하지 마세요. 시스템 테이블의 쿼리 히스토리 를 분석하세요.Z-Order에서 Liquid Clustering으로 마이그레이션: 실전 가이드
한 금융 고객이 2TB 거래 테이블을 Z-Order에서 Liquid Clustering으로 전환한 사례를 공유합니다.전환 전 상황
- 매일 45분 × 365일 = 연간 274시간 의 컴퓨트 비용
- 누군가 ZORDER BY 컬럼을 잘못 지정하면 성능이 즉시 저하
- Z-Order 설정이 테이블 메타데이터에 없어서 “현재 어떤 컬럼으로 정렬되어 있는지” 확인 불가
전환 과정
전환 결과
💡 마이그레이션 주의사항: Liquid Clustering을 활성화한 직후에는 기존 데이터가 아직 클러스터링되지 않은 상태입니다. 첫 OPTIMIZE는 전체 데이터를 처리하므로 시간이 오래 걸립니다. 트래픽이 적은 시간(주말 새벽)에 첫 OPTIMIZE를 실행 하는 것을 권장합니다.