쓰기 정렬
쓰기 정렬 (Write Ordering)
개요
쓰기 정렬(write ordering)은 테이블 파일 내 **데이터의 물리적 배치(layout)**를 제어하는 기능이에요. 쿼리 실행 중에 데이터를 정렬하는 SORT BY와 달리, 쓰기 정렬은 쓰기 시점에 적용되어 저장된 파일에 그대로 유지됩니다.
쓰기 정렬은 Iceberg 테이블에서 지원되며, 테이블 생성 시 지정할 수 있어요. Hive는 두 가지 쓰기 정렬 전략을 지원합니다.
- 타입 고유 정렬 (Type-Native Ordering): 하나 이상의 컬럼을 지정된 순서로 정렬
- Z-정렬 (Z-Ordering): 공간 채움 곡선(space-filling curves)을 사용한 다차원 클러스터링
출처: 문서
본문
타입 고유 컬럼 정렬 (Type-Native Column Ordering)
버전 (Version)
Hive 버전 4.1.0에서 도입되었어요.
구문 (Syntax)
CREATE TABLE table_name (column_definitions)
WRITE [LOCALLY] ORDERED BY column_name [ASC | DESC] [NULLS FIRST | NULLS LAST]
[, column_name [ASC | DESC] [NULLS FIRST | NULLS LAST] ]*
STORED BY ICEBERG
[STORED AS file_format];
예제 (Examples)
CREATE TABLE events (
event_id BIGINT,
event_date DATE,
event_type STRING
)
WRITE LOCALLY ORDERED BY event_date DESC
STORED BY ICEBERG
STORED AS ORC;
CREATE TABLE orders (
order_id BIGINT,
order_date DATE,
customer_id INT,
amount DECIMAL(10,2)
)
WRITE ORDERED BY order_date DESC NULLS FIRST, order_id ASC
STORED BY ICEBERG;
Z-정렬 (Z-Ordering)
버전 (Version)
개요 (Overview)
Z-정렬은 여러 컬럼을 동시에 클러스터링해 다차원 범위 조회(multi-dimensional range queries)의 성능을 높이는 기법이에요.
구문 (Syntax)
CREATE TABLE table_name (column_definitions)
WRITE [LOCALLY] ORDERED BY ZORDER(column_name [, column_name ]*)
STORED BY ICEBERG
[STORED AS file_format];
예제 (Example)
CREATE TABLE user_events (
user_id INT,
event_date DATE,
event_type STRING,
value DOUBLE
)
WRITE LOCALLY ORDERED BY ZORDER(user_id, event_date)
STORED BY ICEBERG
STORED AS ORC;
테이블 프로퍼티 방식 (Table Properties Method)
CREATE TABLE table_name (column_definitions)
STORED BY ICEBERG
TBLPROPERTIES (
'sort.order' = 'zorder',
'sort.columns' = 'column1,column2'
);
SORT BY와의 비교 (Comparison with SORT BY)
SORT BY는 쿼리 실행 시 각 리듀서(reducer) 내부에서 정렬하지만 파일 레이아웃에는 반영되지 않아요.- 쓰기 정렬은 데이터가 파일에 저장되는 순간 정렬되어 물리적으로 유지되므로, 이후 읽기 성능이 개선됩니다.
제한 사항과 고려 사항 (Limitations and Considerations)
- 쓰기 정렬은 Iceberg 테이블에서만 지원됩니다.
- 정렬된 데이터를 활용하려면 해당 컬럼에 대한 필터(pruning)가 효과적으로 동작할 수 있는 워크로드에서 유리해요.
더 알아보기 (Learn more)
쓰기 정렬은 Iceberg 테이블의 물리적 데이터 배치를 미리 정렬해 조회 성능을 높이는 고급 기능이에요. 단일 컬럼 정렬은 Type-Native Ordering, 다중 컬럼 범위 조회에는 Z-Ordering을 사용하면 좋습니다.