Athena에서 CSV 데이터를 쿼리하는 경우 "HIVE_BAD_DATA: Error parsing field value '' for field X: For input string: """ 오류가 발생합니다.

최종 업데이트 날짜: 2020년 3월 30일

Amazon Athena에서 CSV 데이터를 쿼리할 때 다음과 같은 오류가 발생합니다.

Your query has the following error(s):
HIVE_BAD_DATA: Error parsing field value '' for field 0: For input string: ""
This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: b99xxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

간략한 설명

이 오류에는 여러 버전이 있습니다. 오류 메시지에 값이 있는 입력 문자열(예: "For input string: "12312845691")이 포함된 경우 파일의 데이터 형식이 스키마의 예상 데이터 형식과 일치하지 않습니다. 자세한 내용은 "HIVE_BAD_DATA: Error parsing field value for field X: For input string: "12312845691"" 오류로 Amazon Athena 쿼리 실패를 참조하십시오.

null 또는 빈 입력 문자열("For input string: "")을 지정하는 오류는 다음 두 가지가 모두 해당되는 경우 발생합니다.

  • OpenCSVSerDe와 함께 Athena를 사용하고 있습니다. 즉, 소스 데이터가 큰따옴표(")를 기본 따옴표 문자로 사용합니다.
  • 소스 데이터에 null 값("") 또는 빈 셀이 포함되어 있습니다.

예를 들어, 다음 데이터는 "Error parsing field value" 오류를 반환합니다.

"1","1","a3","a4"
"","2","a3","def"
"1","3","abc3","ab4"

​해결 방법

각 열을 STRING으로 정의합니다. Athena의 구문 분석기는 찾은 값에 따라 STRING의 값을 실제 형식으로 구문 분석합니다. 그러면 Athena에서 null 값(공백 없이 큰따옴표로 묶은 빈 문자열)또는 빈 셀(값이나 큰따옴표 없음)을 찾아도 오류가 발생하지 않습니다. Athena가 CSV 파일을 처리하는 방법에 대한 자세한 내용은 CSV 처리를 위한 OpenCSVSerDe를 참조하십시오.

null 또는 빈 값이 있는 열에 대해 특정 데이터 형식을 사용하려면 CAST를 사용하여 열을 원하는 형식으로 변환합니다.

1.    테이블을 생성하고 각 열을 STRING으로 정의합니다.

CREATE EXTERNAL TABLE myopencsvtable_example (
   col1 string,
   col2 string,
   col3 string,
   col4 string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   'separatorChar' = ',',
   'quoteChar' = '"',
   'escapeChar' = '\\'
   )
STORED AS TEXTFILE
LOCATION 's3://awsexamplebucket/';

2.    테이블을 쿼리합니다.

select * from myopencsvtable_example

예제 출력:

     col1     col2    col3      col4
1    1        1       a3        a4
2             2       a3        def
3    1        3       abc3      ab4

3.    "col1"을 INT로 캐스팅하고 null 값("")에 대한 기본값을 인쇄합니다.

SELECT COALESCE(TRY(CAST(col1 AS integer)),0) as cast_column,* from myopencsvtable_example

예제 출력:

     cast_column    col1    col2     col3      col4
1    1              1       1        a3        a4
2    0                      2        a3        def
3    1              1       3        abc3      ab4 

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?