Post

AWS S3 의 csv 파일 쿼리 시 헤더 무시

AWS Athena, Glue 를 이용한 S3 데이터 쿼리

Athena Query Editor 에서 S3 의 데이터에 접근하기 위해서는 먼저 Glue 에 schema 가 등록돼있어야 한다.

[ AWS Glue - Data Catalog ] 경로에서 Database, Table schema 추가하면 Athena 에서 쿼리가 가능한데, S3 의 헤더가 있는 csv 파일에 접근하는 경우 쿼리 실행 시 에러가 발생할 수 있다. 헤더의 자료형(문자열 등)과 schema 와 불일치가 발생하기 때문이라서 이 때는 헤더를 무시해줘야 한다.

ChatGPT 를 찾아보니 Athena 에서 CSV 파일에 대해 외부 테이블 생성할 때, TBLPROPERTIES ('skip.header.line.count'='1') 이런 속성을 붙이면 된다고 한다. AWS Glue 를 통해 생성한 테이블을 삭제하고 재생성하면 된다.

1
2
SHOW CREATE TABLE `test_table`; -- Generate table DDL
DROP TABLE `test_table`;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- Generate table DDL 을 통해 나온 쿼리
CREATE EXTERNAL TABLE `test_table`(
  `column1` string COMMENT '',
  `column2` int COMMENT ''
)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  'separatorChar'=',')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://crema-data-extraction/data_backup/reviews/'
TBLPROPERTIES (
  'classification'='csv',
  'skip.header.line.count'='1' -- 추가한 라인 (1줄의 헤더 무시)
)

This post is licensed under CC BY 4.0 by the author.