복붙노트

[HADOOP] 하이브의 로컬 CSV에 따옴표가있는 값을 묶은 테이블 내보내기

HADOOP

하이브의 로컬 CSV에 따옴표가있는 값을 묶은 테이블 내보내기

하이브에서 로컬 CSV 파일로 테이블을 내보내려고합니다.

INSERT OVERWRITE LOCAL DIRECTORY '/home/sofia/temp.csv' 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\n'
select * from mytable;

문제는 일부 값에 개행 문자 "\ n"이 포함되어 결과 파일이 정말로 엉망이된다는 것입니다.

csv 파일에 특수 문자 (특히 개행 문자)를 포함 할 수 있도록 Hive로 내보낼 때 값을 따옴표로 묶는 방법이 있습니까?

해결법

  1. ==============================

    1.한 가지 가능한 솔루션은 Hive CSV SerDe (Serializer / Deserializer)를 사용하는 것입니다. 사용자 정의 구분 기호, 인용 부호 및 이스케이프 문자를 지정하는 방법을 제공합니다.

    한 가지 가능한 솔루션은 Hive CSV SerDe (Serializer / Deserializer)를 사용하는 것입니다. 사용자 정의 구분 기호, 인용 부호 및 이스케이프 문자를 지정하는 방법을 제공합니다.

    한정:

    내장 된 개행 문자는 처리하지 않습니다.

    유효성:

    CSV Serde는 하이브 0.14 이상에서 사용할 수 있습니다.

    배경:

    CSV SerDe는 https://github.com/ogrodnek/csv-serde를 기반으로하며 HIVE-7777의 Hive 배포본에 추가되었습니다.

    용법:

    이 SerDe는 대부분의 CSV 데이터에서 작동하지만 내장 된 개행 문자는 처리하지 않습니다. SerDe를 사용하려면 org.apache.hadoop.hive.serde2.OpenCSVSerde의 정규화 된 클래스 이름을 지정하십시오.

    원본 설명서는 https://github.com/ogrodnek/csv-serde에서 볼 수 있습니다.

    CREATE TABLE my_table(a string, b string, ...)
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    WITH SERDEPROPERTIES (
       "separatorChar" = "\t",
       "quoteChar"     = "'",
       "escapeChar"    = "\\"
    )  
    STORED AS TEXTFILE;
    

    지정되지 않은 경우 기본 분리 기호, 인용 부호 및 이스케이프 문자

    DEFAULT_ESCAPE_CHARACTER \
    DEFAULT_QUOTE_CHARACTER  "
    DEFAULT_SEPARATOR        ,
    

    참조 : 하이브 CSV-serde

  2. from https://stackoverflow.com/questions/33254183/export-table-enclosing-values-with-quotes-to-local-csv-in-hive by cc-by-sa and MIT license