개요
2024.01.18 - [Hive] 테이블 - 개념 및 유형에 이어서 이 글에서는 Hive가 데이터를 해석하는 방법을 제공하는 SerDe라는 개념에 대해 적어둔다.
SerDe
SerDe는 Serializer and Deserializer의 약어다. Hive는 FileFormat과 SerDe를 이용해 테이블 행을 읽고 쓴다.
파일을 읽을 때는 FileFormat을 이용한 후, Deserializer를 사용해 파일 데이터를 테이블 형식에 맞는 데이터로 변환한다.
반대로 파일을 쓸 때는 데이터를 Serializer를 이용해 key-value 형태로 변환한 후 FileFormat을 사용하여 파일로 저장한다.
Hive 기본 SerDe
Hive는 기본적으로 Avro, ORC, RegEx, Thrift, Parquet, CSV, JsonSerDe를 지원하는데, 테이블 생성 시 STORED AS에 지정하는 파일의 포맷에 따라 자동으로 선택된다.
Syntax | Equivalent |
STORED AS AVRO / STORED AS AVROFILE |
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
|
STORED AS ORC / STORED AS ORCFILE |
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
|
STORED AS PARQUET / STORED AS PARQUETFILE |
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
|
STORED AS RCFILE |
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.RCFileInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'
|
STORED AS SEQUENCEFILE |
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileOutputFormat'
|
STORED AS TEXTFILE |
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
|
사용자 정의 SerDe
필요시 Hive가 기본적으로 제공하는 SerDe 외의 사용자가 직접 SerDe를 구현하여 사용할 수 있다.
테이블의 SerDe 확인
테이블에 설정된 SerDe는 desc formatted 명령으로 확인할 수 있다.
# ORC 테이블 생성
CREATE TABLE orc_tbl (
col STRING
) STORED AS ORC;
# ORC 테이블 확인
hive>desc formatted orc_tbl;
# ORC 테이블의 서데, 인풋 아웃풋 포맷
# Storage Information
SerDe Library: org.apache.hadoop.hive.ql.io.orc.OrcSerde
InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat
참고 문서
https://cwiki.apache.org/confluence/display/hive/developerguide
https://wikidocs.net/23469#row-format
https://medium.com/analytics-vidhya/how-to-create-your-own-hive-serde-871fe675635