[HADOOP] Hive에서 OpenCSVSerde를 사용할 때 모든 열이 문자열로 생성되는 이유는 무엇입니까?
HADOOPHive에서 OpenCSVSerde를 사용할 때 모든 열이 문자열로 생성되는 이유는 무엇입니까?
OpenCSVSerde 및 정수 및 날짜 열을 사용하여 테이블을 만들려고합니다. 그러나 열은 String으로 변환됩니다. 이것은 예상 된 결과입니까? 이 문제를 해결하기 위해이 단계 이후에 명시 적으로 타입 캐스팅을 수행합니다 (전체 실행 속도가 느려짐)
hive> create external table if not exists response(response_id int,lead_id int,creat_date date ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ('quoteChar' = '"', 'separatorChar' = '\,', 'serialization.encoding'='UTF-8', 'escapeChar' = '~') location '/prod/hive/db/response' TBLPROPERTIES ("serialization.null.format"="");
OK
Time taken: 0.396 seconds
hive> describe formatted response;
OK
# col_name data_type comment
response_id string from deserializer
lead_id string from deserializer
creat_date string from deserializer
문자열에 대한 데이터 유형 변경을 설명하는 소스 코드.
해결법
-
==============================
1.이는 CSVSerDe serde의 알려진 제한 사항입니다. CSVSerDe는 모든 열을 String 유형으로 취급합니다. 이 SerDe를 사용하여 문자열이 아닌 열 유형으로 테이블을 작성하더라도 DESCRIBE TABLE 출력은 문자열 열 유형을 표시합니다. 유형 정보는 SerDe에서 검색됩니다. 표에서 열을 원하는 유형으로 변환하려면 원하는 유형으로 CAST를 수행하는 표에 대한보기를 작성할 수 있습니다.
이는 CSVSerDe serde의 알려진 제한 사항입니다. CSVSerDe는 모든 열을 String 유형으로 취급합니다. 이 SerDe를 사용하여 문자열이 아닌 열 유형으로 테이블을 작성하더라도 DESCRIBE TABLE 출력은 문자열 열 유형을 표시합니다. 유형 정보는 SerDe에서 검색됩니다. 표에서 열을 원하는 유형으로 변환하려면 원하는 유형으로 CAST를 수행하는 표에 대한보기를 작성할 수 있습니다.
참조 : CSVSerde이 합류점은 CSVSerDe에 관한 것이지만 Open-CSV를 사용합니다
또한 여기를 참조하십시오 : https://docs.aws.amazon.com/athena/latest/ug/csv.html
그리고 여기 : Hive "OpenCSVSerde"는 테이블 정의를 변경합니다.
from https://stackoverflow.com/questions/50001124/why-does-all-columns-get-created-as-string-when-i-use-opencsvserde-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] mongodb와 apache-spark를 연결할 때 쿼리하는 방법 (0) | 2019.07.26 |
---|---|
[HADOOP] 상태 1로 종료 된 Sqoop 하이브 (0) | 2019.07.26 |
[HADOOP] YARN UNHYALTHY 노드 (0) | 2019.07.26 |
[HADOOP] 지도에서 키에 유형이 일치하지 않습니다. 예상 됨.받은 텍스트 ... LongWritable (0) | 2019.07.26 |
[HADOOP] 왜 파일이 hadoop에 존재하는지 검사하면 NullPointerException이 발생합니까? (0) | 2019.07.26 |