복붙노트

[HADOOP] Hive에서 OpenCSVSerde를 사용할 때 모든 열이 문자열로 생성되는 이유는 무엇입니까?

HADOOP

Hive에서 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. ==============================

    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"는 테이블 정의를 변경합니다.

  2. 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