복붙노트

[HADOOP] 큰 따옴표로 묶고 탭으로 HIVE 테이블로 구분하여 CSV 데이터를로드하는 방법?

HADOOP

큰 따옴표로 묶고 탭으로 HIVE 테이블로 구분하여 CSV 데이터를로드하는 방법?

값을 큰 따옴표 '' '로 묶고 탭을'\ t '로 묶은 CSV 파일에서 데이터를로드하려고합니다. 하지만 하이브에로드하려고하면 오류가 발생하지 않고 데이터가로드되지만 모든 데이터가 하나의 열에로드되고 대부분의 값이 NULL로 표시됩니다. 아래 테이블은 내 create table이다.

CREATE TABLE example
(
organization  STRING,
order BIGINT,
created_on  TIMESTAMP,
issue_date TIMESTAMP,
qty  INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t' 
ESCAPED BY '"'
STORED AS TEXTFILE;

입력 파일 샘플;

 "Organization" "Order"  "Created on"   "issue_date"   "qty"
 "GB"   "111223"    "2015/02/06 00:00:00"   "2015/05/15 00:00:00"   "5"
 "UK"   "1110"  "2015/05/06 00:00:00"   "2015/06/1 00:00:00"   "51"

하이브 테이블로 데이터를 푸시하는 Load 문.

 LOAD DATA INPATH '/user/example.csv' OVERWRITE INTO TABLE example

무엇이 문제 일 수 있으며 어떻게 파일 헤더를 무시할 수 있습니까? 그리고 만약 내가 ESCAPED BY ' "'를 작성 문에서 각각의 열에로드하지만 모든 값은 큰 따옴표로 묶여 있습니다. 값에서 큰 따옴표를 제거하고 파일의 헤더를 무시하려면 어떻게해야합니까?

해결법

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

    1.이제 분리 문자를 정의하고 큰 따옴표를 쉽게 벗어날 수있는 OpenCSVSerde를 사용할 수 있습니다.

    이제 분리 문자를 정의하고 큰 따옴표를 쉽게 벗어날 수있는 OpenCSVSerde를 사용할 수 있습니다.

    CREATE EXTERNAL TABLE example (
       organization  STRING,
       order BIGINT,
       created_on  TIMESTAMP,
       issue_date TIMESTAMP,
       qty  INT
    )
    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    WITH SERDEPROPERTIES (
       "separatorChar" = "\t",
       "quoteChar"     = "\""
    )  
    LOCATION '/your/folder/location/';
    
  2. ==============================

    2.당신은 이스케이프 문자를 사용하지 않고 이스케이프 문자를 사용하고 싶지 않습니다. 하이브가 실제로 따옴표 문자를 지원하지 않는다고 생각합니다. quotechar 속성을 받아들이는이 csv serde를 살펴볼 수도 있습니다.

    당신은 이스케이프 문자를 사용하지 않고 이스케이프 문자를 사용하고 싶지 않습니다. 하이브가 실제로 따옴표 문자를 지원하지 않는다고 생각합니다. quotechar 속성을 받아들이는이 csv serde를 살펴볼 수도 있습니다.

    또한 HUE가있는 경우에는 CMS 저장소를로드하기 위해 metastore manager webapp를 사용할 수 있습니다. 헤더 행, 열 데이터 유형 등을 처리합니다.

  3. ==============================

    3."Hive에는 이제 추가 jar 또는 오류가 발생하기 쉽고 느린 regex를 추가하지 않고 인용 된 필드를 올바르게 구문 분석 할 OpenCSVSerde가 포함되어 있습니다."

    "Hive에는 이제 추가 jar 또는 오류가 발생하기 쉽고 느린 regex를 추가하지 않고 인용 된 필드를 올바르게 구문 분석 할 OpenCSVSerde가 포함되어 있습니다."

    ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'

    출처 = Ben Doerr

    EMR / Hive를 사용하여 S3에서 DynamoDB로 데이터를 가져올 때 따옴표로 묶인 필드 (CSV)를 처리하는 방법

  4. ==============================

    4.CSV Serde를 사용하여 테이블을 만듭니다. 나는 다음과 같이 하이브에 테이블을 만들었고 매력처럼 작동합니다.

    CSV Serde를 사용하여 테이블을 만듭니다. 나는 다음과 같이 하이브에 테이블을 만들었고 매력처럼 작동합니다.

    CREATE EXTERNAL TABLE IF NOT EXISTS myTable (
    id STRING,
    url STRING,
    name STRING
    )
    row format serde 'com.bizo.hive.serde.csv.CSVSerde'
    with serdeproperties ("separatorChar" = "\t")
    LOCATION '<folder location>';
    
  5. ==============================

    5.CSV serde "csv-serde-1.1.2.jar"를 사용하여 큰 따옴표없이 파일을로드 할 수 있습니다.

    CSV serde "csv-serde-1.1.2.jar"를 사용하여 큰 따옴표없이 파일을로드 할 수 있습니다.

    다운로드 링크:

    http://ogrodnek.github.io/csv-serde/

    및 create table statement as

    CREATE TABLE <table_name> (col_name_1 type1, col_name_2 type2, ...) row format serde 'com.bizo.hive.serde.csv.CSVSerde';
    

    create table stmt에서 다음 등록 정보로 헤더를 제거 할 수 있습니다

    tblproperties ("skip.header.line.count"="1");
    
  6. from https://stackoverflow.com/questions/30637536/how-to-load-csv-data-with-enclosed-by-double-quotes-and-separated-by-tab-into-hi by cc-by-sa and MIT license