Skip to main content
이 문서는 레이크하우스 아키텍처 섹션의 일부입니다.

왜 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) 세 컬럼으로 파티셔닝했습니다. 얼핏 보면 합리적으로 보이지만, 결과는 참담했습니다.
실제로는 모든 조합이 존재하지 않아서 약 120만 개 파티션 이 생성되었지만, 각 파티션의 평균 파일 크기는 800KB 였습니다. Spark가 파일 목록을 읽는 것만으로 15분이 걸렸고, 실제 쿼리는 그 뒤에 시작되었습니다.
⚠️ 많은 팀이 이 실수를 합니다: “파티셔닝은 많이 할수록 좋다”는 잘못된 믿음. 파티션 키의 카디널리티 곱이 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를 실행 하는 것을 권장합니다.

Liquid Clustering과 Predictive Optimization의 시너지

Liquid Clustering의 최대 운영 이점은 Predictive Optimization과 결합했을 때 나타납니다.

실전에서 자주 받는 질문들


정리


참고 링크