Amazon Athena & S3
S3(Simple Storage Service)로 AWS를 대표하는 클라우드 서비스입니다. 객체 스토리지 (Object Storage)라는 형태의 서비스로 스토리지를 추상화한 형태로써 사용자는 데이터가 어느 블럭에 저장되는지 알 필요 없이 편리하게 사용 가능한 스토리지입니다. 물론 OS에 볼륨 마운트하여 사용도 가능합니다! 하지만 I/O 속도는 블럭 스토리지에 비하면 꽤 느린 편입니다. MiniO를 이용하여 객체 스토리지를 구현할 수 있습니다.
Athena는 Standard SQL을 이용하여 S3에 저장된 데이터를 간단하게 질의할 수 있는 대화형 쿼리 서비스입니다.
HDFS에서 Hive를 이용하여 SQL 질의하는 구조와 유사하구나~ 하고 이해하시면 좋습니다 🥳
Amazon S3에 저장된 여러 CSV 데이터를 Athena에서 테이블을 구성할 때, 1번 라인인 Header가 들어가는 상황을 대처해봅시다.
Athena에서 테이블을 생성하고자 하는 버킷에 저장된 CSV 파일들을 먼저 살펴봅시다.
스키마가 전부 동일한가요?
그렇다면, 아래 파라미터를 추가하여 테이블 생성할 때 헤더를 생성할 수 있도록 설정합시다.
TBLPROPERTIES ('skip.header.line.count' = '1')
파라미터를 입력하여 아래와 같이 입력합니다.
CREATE EXTERNAL TABLE IF NOT EXISTS [TABLE] (
`COLUMN_01` string,
`COLUMN_02` int,
`COLUMN_03` timestamp,
`COLUMN_04` string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = ',',
'field.delim' = ','
) LOCATION 's3://athena-examples-myregion/flight/csv/';
TBLPROPERTIES (
'skip.header.line.count' = '1'
)
Athena에서 External Table을 생성해서 테스트해봅시다.
더 이상 파일의 숫자만큼 Header값이 Row에 추가되지 않고 온전한 값이 들어가는 것을 확인할 수 있습니다.
AWS Athena Documents - LazySimpleSerDe for CSV, TSV, and Custom-Delimited Files - Ignoring Headers