impala 에서 parquet 테이블을 보정할 일이 있어서, CTAS로 일부분만 백업해두고 혹시 문제가 있는지 쿼리를 해봤는데 다음과 같은 에러가 발생했다.
Error converting column: 126 to DOUBLE
Error parsing row: file: hdfs://cluster01/user/hive/warehouse/imp.db/tab_dpcn_info_l/a7422143a7852306-8b0cbcb600000005-1957752130_data.0, before offset: 629145600
에러 메시지 자체는 126번 컬럼을 DOUBLE 로 형변환 하는데 실패했고 해당 문제가 발생한 데이터가 위 hdfs://..
경로에, offset
번째 줄에 있다는 내용인데, CTAS로 복제해서 만든 테이블을 csv 형태의 텍스트 파일로 저장할 때에는 위와같은 문제가 발생했고, 다시 parquet 포맷으로 저장 (stored as parquet
)했을 때에는 에러 발생 없이 정상 동작되었다.
결론은 csv는 불완전한 파일 포맷으로서 사용시 주의를 해야하며, parquet 포맷을 이용하는 습관을 들이자.
문제 원인을 찾다가 파일을 까보는 수고로움을 감수한 덕분에 알게된 사실은, CDH는 csv 형태와 같은 텍스트 파일로 테이블을 저장할 때 delimeter로 ^A
를 사용한다.