ORC
Parquet와 마찬가지로 컬럼 기준 저장 포맷으로, Hive 에 특화된 포맷. Imapala, Pig, Spark 등 다른 쿼리 엔진에서 사용하기엔 부적합하다.
- 초기 Hive는 TextFile, SequenceFile 포맷 성능을 높이기 위해 RCFile이 개발되었음
- RCFile은 각 컬럼을 하나의 파일 묶음으로 만들었으나, 분산 처리된 데이터를 모으는 비용이 많이 들어 ORC 포맷이 개발되었다.
용어
- stripes: row data의 group을 stripes라 함. stripe의 기본 사이즈는 256MB 이다.
- data: column 당 multiple stream로 구성되었다.
- index: skipping row를 위해 필요하며, default skip은 10,000 row이다.
- footer: stream location 정보를 가진다.
- file footer: 보조 정보 (metadata ?)를 저장한다. 예를들어 stripe location이나 각 column의 count, min, max, sub 정보 (통계 정보), 데이터 스키마 정보 등을 가진다.
- postscript: 파일의 끝을 나타내며, compression parameter랑 compressied footer의 크기(?)를 가진다.
- stripes내 Row data들이 있으며, 각 Column의 Index data와 실제 data들이 저장된다.
- Index data는 각 column의 min, max 값 (?), 각 column의 row position이 저장된다.
- Index data는 stripes 및 row group 선택에 사용되며 Query 응답에는 사용되지 않는다.
- secondary key를 통해 table을 정렬하여, 실행 시간을 크게 줄일 수 있다.
- 만약 primery partition은 date라 했을 때, state, zip code, last name 등으로 정렬을 할 수 있고 이를 통해 모든 state를 읽지 않고 원하는 state만 looking 할 수 있다.
ORC 속성
압축 (Compression)
ORC 파일 포맷을 사용하는 테이블의 모든 스트림은 지정된 코덱을 사용하여 압축. 압축 코덱은 테이블 생성 시 TBLPROPERTIES 옵션 내 orc.compress라는 key 값을 정의하여 지정 가능.
ORC 파일 보기
# hive orcdump
hive --orcfiledump 'hdfs 경로/*.orc' | more