상황
최근에 신규 데이터 요청이 들어왔다.
요청이 올 때 엑셀로 각 컬럼명과 타입 그리고 컬럼설명이 포함되어 온다.
RDB가 아닌 테이블이라 다른 요청 사항은 없다.
사용자의 요청대로 생성을 하였고 테스트 데이터를 요청하였다.
그런데 요청한 측에서 타입이 맞지 않다고 했다.
에러내용은 다음과 같았다.
awsathena error : HIVE_BAD_DATA
Field day's type BINARY in parquet file ${s3_path} is incompatible with type timestamp(3) defined in table schema
요약하자면 timestamp 타입을 가진 컬럼이 있는데, 해당 컬럼은 현재 BINARY로 들어와있다는 것이다.
참고로 우리는 최종 데이터를 parquet 형식으로 변경되어 적재가 된다.
원인
요청한 측에서 요구한대로 작성한 것은 맞다.
parquet파일에서 확인을 해보니 BINARY로 되어있던 것도 맞았다.
참고로 parquet 파일에서 컬럼 별 스펙을 보고 싶으면 아래 명령어로 하면 보기 편하다.
parquet-tools inspect file.parquet > file.txt
위와 같이 파일하나 빼서 보면 vi로 확인하기 편하다.
용량이 크지 않으니 추천
다시 본론으로 돌아와서 정리하자면 요청했던 스키마와 실질적으로 보내준 스키마가 맞지 않았다.
timestamp 타입으로 하려면 int96 같은 타입으로 지정되어야 한다.
물론 int96 하위 타입도 된다.
현재 요청한 타입과 보내준 데이터 타입이 맞지 않은 상태니 확인 부탁드립니다.
해당 내용을 요청자에게 안내하고 답변을 기다렸다.
해결
요청한 측에서도 데이터를 생성하는 곳이 아니였고, 원천에서 받는 데이터였다.
원천에서 이미 문자형태로 유입이 되고 있다고 하여 timestamp로 지정하였던 컬럼은 string으로 다시 재정의했다.
느낀점
요청 온 대로 작업하는 것은 맞다. 괜히 추측해서 작업하는 것보단 요청온대로 작업하는 게 맞다.
사실 정답이 없다. 모두 사람이 하는 것이기에 미처 확인하지 못한 부분들이 있다.
누가 맞다, 틀리다 보단 정확한 상태를 파악 후 상대방에게 안내를 주는 게 맞다고 느꼈다.
IT 의 일을 하다보면 하나의 귀결이 있다.
이 모든 것은 '데이터'를 보려고 하기 때문이다.
데이터를 다루는 실질적인 사용자가 빠르게 데이터를 확인하게 해주는 게 IT 엔지니어의 일이라고 생각한다.
결론은 parquet파일을 사용한다면 내가 말한 명령어로 확인하자
'개발기록 > AWS' 카테고리의 다른 글
Glue Cli로 테이블 생성 시 mismatched input 'external' 에러 조치한 썰 (2) | 2024.11.12 |
---|