리밸런스 컴팩션

리밸런스 컴팩션 (Rebalance compaction)

성능 향상을 위해 Hive는 내부적으로 명시적으로 버킷(bucket)되지 않은 테이블에도 버킷 파일을 만들어요. 사용 방식에 따라, 명시적으로 버킷되지 않은 full-acid ORC 테이블에 적재된 데이터는 불균형한 분포를 만들 수 있는데, 어떤 버킷은 다른 버킷보다 훨씬 커질 수 있어요(> 100배). 불균형한 테이블은 큰 버킷을 읽는 데 더 오래 걸리므로 성능 저하가 발생합니다. 리밸런스 컴팩션은 암시적 버킷 파일들 사이에서 데이터를 균등하게 재분배해 이 문제를 해결해 줘요.

  • 리밸런스 컴팩션은 절대 자동으로 시작되지 않아요.
  • 다른 컴팩션 유형과 달리, 리밸런스 컴팩션은 테이블에 **배타적 쓰기 잠금(exclusive write lock)**을 겁니다.

SQL 예제:

ALTER TABLE table_name COMPACT 'REBALANCE';

출처: 문서

본문

암시적 버킷의 수 (Number of implicit buckets)

리밸런스 컴팩션 중 원하는 암시적 버킷 수를 설정할 수 있어요.

SQL 예제:

ALTER TABLE table_name COMPACT 'REBALANCE' CLUSTERED INTO n BUCKETS;

버킷 수를 지정하지 않으면 버킷 수는 그대로 유지되고, 데이터만 버킷들 사이에서 재분배돼요.

정렬 (Ordering)

선택적으로 order by 표현식을 제공해 리밸런스 중에 데이터를 재정렬할 수 있어요.

SQL 예제:

ALTER TABLE table_name COMPACT 'REBALANCE' ORDER BY column_name DESC;

order by 표현식을 설정하지 않으면, 컴팩션 후에도 데이터의 순서는 그대로 유지돼요.

제한 사항 (Limitations)

  • 리밸런스 컴팩션은 파티션 내에서만(within partitions) 할 수 있어요.
  • 암시적으로 버킷된(implicitly bucketed) 테이블에서만 지원되며, 클러스터된(clustered) 테이블은 지원되지 않아요.
  • full-acid 테이블에서만 지원되며, insert-only 테이블은 지원되지 않아요.
  • 쿼리 기반 컴팩션(query-based compaction) 으로만 가능하고, MR 기반 컴팩션은 지원되지 않아요.

더 알아보기 (Learn more)

리밸런스 컴팩션은 버킷 간 데이터 불균형으로 인한 읽기 성능 저하를 해결하는 도구예요. 자동 실행되지 않으므로 필요한 시점에 직접 ALTER TABLE ... COMPACT 'REBALANCE' 문으로 실행해야 하며, 배타적 쓰기 잠금을 걸기 때문에 운영 시점을 신중히 정해야 합니다.